美文网首页
数组中三个数的和为0的组合

数组中三个数的和为0的组合

作者: 黄靠谱 | 来源:发表于2019-03-01 16:05 被阅读0次

思路

  1. 先对数组进行排序(增序)
  2. 设置3个值 low + mid + high,low从最小的数开始,mid从最小数+1开始,high从最大数开始
  3. 为了防止有重复的情况发生,比如 -1 -1 -1 0 2,我们利用set去重
  4. 结束遍历的几种情况
  • 三个数相加等于0
  • 最小数>0
  • 最大数<0
  • low+mid+high<0
public static void main(String[] args) {
    int[] arr={-3,-2,-1,-1,-1,0,0,0,1,2,3,4,-10,8};
    if(arr.length<3) return;
    Arrays.sort(arr);
    printArr(arr);
    int length=arr.length;
    //结束的条件
    //1. 遍历到只剩下最后3个数为止
    //2. arr[i]>0  最小的数 大于0
    //3. arr[k]<0 最大的数小于0
    //3个数  low+ mid + high <0
    
    Set<String> result=new HashSet();
    
    for(int i=0;i<length-2&&arr[i]<0;i++){
        int low=arr[i];
        for(int j=i+1;j<length-1;j++){
            int mid=arr[j];
            for(int k=length-1;k>j&&arr[k]>0&&low+mid+arr[k]>=0;k--){
                int high=arr[k];
                int sum=low + mid + high;
                if(sum==0){
                    result.add(low+","+mid+","+high);
                }
            }
        }
    }
    //check  3个零的情况
    for(int zeroIndex=0;zeroIndex<length-2;zeroIndex++){
        if(arr[zeroIndex]==0 && arr[zeroIndex+2]==0){
            result.add(0+","+0+","+0);
            break;
        }
    }
    
    //迭代输出结果
    Iterator<String> it = result.iterator();  
    while (it.hasNext()) {  
      String str = it.next();  
      System.out.println(str);  
    }   
}   
 
 
 public static void printArr(int[] arr){
     for(int i=0;i<arr.length;i++){
         System.out.println(arr[i]);
     } 
 }

相关文章

网友评论

      本文标题:数组中三个数的和为0的组合

      本文链接:https://www.haomeiwen.com/subject/xcnduqtx.html