<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;
        }
    }
    主站蜘蛛池模板: 亚洲一区二区免费视频| 好猛好深好爽好硬免费视频| 久久精品国产亚洲AV电影网| 伊人免费在线观看高清版| 成年午夜视频免费观看视频| 亚洲无码在线播放| 久久无码av亚洲精品色午夜| 美女网站免费福利视频| 亚洲国产一区在线| 国内精品免费久久影院| 天堂亚洲国产中文在线| 久久午夜羞羞影院免费观看| 亚洲自偷自偷图片| 亚欧乱色国产精品免费视频| 亚洲 自拍 另类小说综合图区| 亚洲久热无码av中文字幕 | 成人免费看片又大又黄| 国产特黄特色的大片观看免费视频| 亚洲天堂一区二区| 亚洲国产成人久久一区久久| 一级日本高清视频免费观看| 久久精品国产亚洲7777| 黄视频在线观看免费| 自拍偷区亚洲国内自拍| 亚洲AV无码乱码在线观看裸奔| 国产日韩一区二区三免费高清| 亚洲AV无码精品色午夜果冻不卡| 国产大片线上免费看| 久久久久久亚洲精品无码| 亚洲A∨无码无在线观看| 2021在线永久免费视频| 亚洲人成网站看在线播放| 69成人免费视频无码专区| 欧美亚洲国产SUV| 亚洲国产韩国一区二区| 午夜视频在线观看免费完整版| 国产偷国产偷亚洲高清人| 丁香五月亚洲综合深深爱| 日本高清免费不卡在线| 中国性猛交xxxxx免费看| 亚洲精品国产成人专区|