题解 | #牛群的标签和#

牛群的标签和

https://www.nowcoder.com/practice/42ae88bedeb74da99813f6150769d07e

题目考察的知识点

考察双指针算法

题目解答方法的文字分析

数组排序后,使用双指针遍历,左右指针分别从前后遍历。双重遍历查找符合要求的四个数的组合。注意去重,细节参看代码实现即可。

本题解析所用的编程语言

使用Java解答

完整且正确的编程代码

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @param target int整型 
     * @return int整型二维数组
     */
    public int[][] fourSum (int[] nums, int target) {
        // write code here
        List<List<Integer>> res = new ArrayList();
        Arrays.sort(nums);
        for(int i=0; i<nums.length-3; i++){
            if(i>0&&nums[i]==nums[i-1]) continue; // 去重
            for(int j=i+1;j<nums.length-2; j++){
                // 同样去重
                if(j>i+1&&nums[j]==nums[j-1]) continue;
                int left = j+1,right = nums.length-1;
                while(left<right){
                    //int tag = target - nums[i] - nums[j];
                    if((long)nums[left] + nums[right] + nums[i] + nums[j] >target){
                        right--;
                    }else if((long)nums[left]+nums[right]+nums[i] + nums[j]<target){
                        left++;
                    }else{
                        ArrayList<Integer> temp = new ArrayList<>();
                        temp.add(nums[i]);
                        temp.add(nums[j]);
                        temp.add(nums[left]);
                        temp.add(nums[right]);
                        res.add(new ArrayList(temp));
                        while(left<right&&nums[left]==nums[left+1]){
                            left++;
                        }
                        while(left<right&&nums[right]==nums[right-1]){
                            right--;
                        }
                        left++;
                        right--;
                    }
                }
            }
        }
        if(res.size()==0) return new int[][]{};
        int[][] ret = new int[res.size()][res.get(0).size()];
        for(int i=0; i<res.size(); i++){
            for(int j=0; j<res.get(0).size(); j++){
                ret[i][j] = res.get(i).get(j);
            }
        }
        return ret;
    }
}

全部评论

相关推荐

行云流水1971:你的简历已经有不错的内容基础,但在岗位匹配度、成果量化、逻辑分层上还有优化空间,我结合产品 / 金融科技类岗位偏好帮你调整: 一、现有问题 & 优化方向 信息冗余:课程 / 学生工作与目标岗位关联弱,可精简; 成果颗粒度不足:部分数据缺少 “对比基准”(比如 “效率提升” 没说之前的情况); 岗位标签弱:产品岗核心能力(如需求闭环、PRD 撰写)体现不够突出。 二、优化后简历(以 “金融科技产品岗” 为例) 教育经历 2023.09-2027.06 郑州轻工业大学(公办一本) | 软件工程 | 本科 核心课程:Java 程序设计、数据库原理、Python(匹配产品岗 “技术理解” 需求) 学习成果:专业核心课 90+,获校级一等奖学金; 学生工作:院学生会主席,统筹 6 场校级活动(覆盖 2000 + 人次),锻炼跨部门协作与项目统筹能力。 实习经历
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务