<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 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    三個數(shù)之和

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

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


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

    還要注意的是去掉重復(fù)的解,保證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一免费| 欧美男同gv免费网站观看| 亚洲日本中文字幕区| 免费人成激情视频在线观看冫| 亚洲国产成人久久综合区| 久久亚洲中文无码咪咪爱| 四虎影视永久免费观看网址| 亚洲熟妇av午夜无码不卡| 在线免费观看视频你懂的| 综合偷自拍亚洲乱中文字幕| 日本免费观看网站| 看成年女人免费午夜视频| 亚洲熟伦熟女新五十路熟妇 | 亚洲bt加勒比一区二区| 无码精品国产一区二区三区免费 | 18勿入网站免费永久| 亚洲一区二区三区高清在线观看| 在线免费观看毛片网站| 日本在线观看免费高清| 亚洲国产精彩中文乱码AV| 8888四色奇米在线观看免费看| 亚洲精品国产免费| 午夜高清免费在线观看| 久香草视频在线观看免费| 亚洲成色WWW久久网站| 我们的2018在线观看免费高清| 精品丝袜国产自在线拍亚洲| 免费不卡中文字幕在线| 久久国产精品免费观看| 亚洲一线产区二线产区区| 亚洲国产V高清在线观看| 免费人成黄页在线观看日本| 国产成人精品日本亚洲11| 亚洲国产精品综合久久网络 | 亚洲AV综合色区无码一区爱AV | 秋霞人成在线观看免费视频| 亚洲中文字幕久在线| 亚洲国产成人久久综合区| 亚洲一区二区三区免费在线观看| 精品成人一区二区三区免费视频 |