题解 | #牛群的标签和#

牛群的标签和

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;
    }
}

全部评论

相关推荐

05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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