zoukankan      html  css  js  c++  java
  • threeSum问题

    三数之和等于0的问题:

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

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

    例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
    
    满足要求的三元组集合为:
    [
      [-1, 0, 1],
      [-1, -1, 2]
    ]

     思想:

      由于水平问题,本人目前只能想到用一个一个遍历来找满足条件的元素。

        1.首先我们定义两个集合,一个是List找<Integer>类型集合list。

        2.找到满足元素后,定义一个是Integer类型的集合l,我们需要把满足条件的元素加入集合l里面。

        3.然后我们判断集合list包含的集合l是否包含满足条件的元素,如果满足,说明前面我们已经加入了,可能是顺序不同,但是数字完全相同。这个时候直接移除该集合l然后跳出判断语句。

        4.接下来判断集合list是否包含集合l,不包含就add

        5.最后我们返回list集合,整体思路大概就是这样。

    下面我们附上代码

    import java.util.ArrayList;
    import java.util.List;
    
    public class threeSum {
    	 public List<List<Integer>> threeSum(int[] nums) {
    		 List<List<Integer>> list = new ArrayList<List<Integer>>();
    		 for(int i = 0;i<nums.length-2;i++) {
    			 for(int j = i+1;j<nums.length - 1;j++) {
    				 for(int k = j+1;k<nums.length;k++) {
    					 if(nums[i]+nums[j]+nums[k] == 0) {
    						 List<Integer> l = new ArrayList<Integer>();
    						 l.add(nums[i]);
    						 l.add(nums[j]);
    						 l.add(nums[k]);
    						 for(int m = 0;m<list.size();m++) {
    							 if(list.get(m).contains(nums[i])&&list.get(m).contains(nums[j])&&list.get(m).contains(nums[k])&&(nums[i]!=0||nums[j]!=0||nums[k]!=0)) {
    								list.remove(m);
    							 	break;
    							 }
    						 }
    						 if(!list.contains(l)) {
    							 list.add(l);
    						 }
    					 }
    				 }
    			 }
    		 }
    		 return list;
    	 }
    

      总结:写这段代码遇到最大的问题就是处理三个元素都是0时,条件判断语句没想好,导致写的代码看起来不美观,并且,时间复杂度也挺大的。这个代码后期会优化的。

      坚持撸下去,终有一天我们也能站在最高处。      -------送给和我一样的初学者

  • 相关阅读:
    FFT学习及简单应用(一点点详细)
    Codeforces 1131 (div 2)
    【NOI2012】魔幻棋盘
    【hdu多校联考第二场】Odd Shops
    【Helvetic Coding Contest 2018】B2. Maximum Control (medium)
    解线性同余方程组
    Math teacher's homework
    【NOIP模拟赛】一道挖掉背景的数学题
    逆向基础-模块隐藏之断链
    解决请求筛选模块被配置为拒绝包含的查询字符串过长的请求
  • 原文地址:https://www.cnblogs.com/du001011/p/10035788.html
Copyright © 2011-2022 走看看