<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小明思考

    Just a software engineer
    posts - 124, comments - 36, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    三個數之和

    Posted on 2013-05-01 23:13 小明 閱讀(1922) 評論(0)  編輯  收藏 所屬分類: 數據結構和算法
    問題給定一個由n個整數組成的數組S,是否存在S中的三個數a,b,c使得 a+b+c=0?找出所有的不重復的和為0的三元組。

    注意:
    1.三元組的整數按照升序排列 a<b<c
    2.給出的結果中不能含有相同的三元組


    分析:
    如果窮舉所有這樣的三元組,需要三重循環,算法的復雜度肯定是O(n3)。
    能不能把算法復雜度降到O(n2)呢?答案是可以的。
    首先我們要把數組排序(O(nlgn)),然后固定a,在剩余的數組中看能不能找到a+b+c=0
    因為數組是排序的,我們把b指向第一個元素,c指向末尾。
    三種情況:
    a+b+c=0:找到一組解
    a+b+c<0: b向后移一位,增大和
    a+b+c>0: c向前移一位,減小和

    還要注意的是去掉重復的解,保證a和b都和上次的不同即可。

    代碼如下:

    public class Solution {
        public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
            ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
            if(num!=null && num.length>=3){
                Arrays.sort(num);
                int len = num.length;
                int lasta=0;
            
                for(int i=0;i<len-2;++i){
                    int a = num[i];
                    if(i>0 && a==lasta){
                        continue;
                    }
                    lasta = a;
                    int s = i+1;
                    int p = len-1;
                    int lastb = 0, j=0;
                    while(s<p){
                        int b = num[s];
                        int c = num[p];
                        int t = a+b+c;
                        if(t==0){
                            ++s;
                            --p;
                            if(j>0 && b==lastb){
                                continue;
                            }
                            ++j;
                            lastb = b;
                            ArrayList<Integer> tripplet = new ArrayList<Integer>();
                            tripplet.add(a);
                            tripplet.add(b);
                            tripplet.add(c);                        
                            result.add(tripplet);
                        }
                        else if(t>0){
                            --p;
                        }
                        else{
                            ++s;
                        }
                    }
                }
            }
            return result;
        }
    }
    主站蜘蛛池模板: 免费视频专区一国产盗摄| 99久久免费看国产精品| 精品国产免费观看久久久 | 成年大片免费视频| 亚洲人成网站色在线观看| 97在线观免费视频观看 | 亚洲av无码一区二区三区四区 | 无码一区二区三区免费视频 | 亚洲精品无码不卡在线播HE| 久久99久久成人免费播放| 中文字幕无码精品亚洲资源网| 成在人线av无码免费高潮水| 中国亚洲女人69内射少妇| 91视频精品全国免费观看| 亚洲成av人影院| 2021免费日韩视频网| 亚洲av日韩专区在线观看| 亚洲国产精品狼友中文久久久| 一级特黄录像免费播放肥| 久久精品7亚洲午夜a| 成人免费的性色视频| 亚洲欧美日韩中文无线码| 亚洲国产中文字幕在线观看| 中文字幕久无码免费久久| 亚洲系列中文字幕| 日本高清免费中文字幕不卡| 一级做α爱过程免费视频| 亚洲bt加勒比一区二区| 亚洲人成网站免费播放| 羞羞视频在线观看免费| 久久久亚洲欧洲日产国码aⅴ| 大学生一级毛片免费看| 污污污视频在线免费观看| 久久精品亚洲精品国产色婷| 日韩免费三级电影| 99在线视频免费观看| 亚洲精品中文字幕无乱码麻豆| 亚洲第一页综合图片自拍| 99免费在线观看视频| 国产亚洲精品第一综合| 久久久久亚洲av无码专区|