每周算法题(2019-06-16)

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]

   public List<List<Integer>> threeSum(int[] nums) {

        List<List<Integer>> list2 = new ArrayList<List<Integer>>();
        // 判断给定数组是否存在三个及以上元素
        if(nums.length >= 3){
            // 对数组排序并放入HashMap中
            Arrays.sort(nums);
            Map<Integer,Integer> map = new HashMap<>();
            for(int i =0; i<nums.length;i++){
                map.put(nums[i],i);
            }
            List<Integer> list = null;
            for(int i=0;i<nums.length;i++){
                for(int j=i+1;j<nums.length;j++){
                    int c = 0-nums[i]-nums[j];
                    // 判断mapKey值是否存在使三数相加为零,且下标大于j
                    if(map.containsKey(c) && map.get(c) > j){
                        list = new ArrayList<Integer>();
                        list.add(nums[i]);
                        list.add(nums[j]);
                        list.add(c);
                        if(!list2.contains(list)){
                            list2.add(list);
                        }
                    }
                }
            }
        }
        return list2;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 10,909评论 0 13
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 4,132评论 0 2
  • 选择题部分 1.(),只有在发生短路事故时或者在负荷电流较大时,变流器中才会有足够的二次电流作为继电保护跳闸之用。...
    skystarwuwei阅读 14,509评论 0 7
  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,330评论 0 18
  • 声音中透露着爽朗与宁静,像山谷中的风,轻柔又饱含坚定,只听声音,诸伟的脑海中就勾勒出一幅面容。但当诸伟抬起...
    斌红康阅读 411评论 1 2

友情链接更多精彩内容