<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;
        }
    }
    主站蜘蛛池模板: 日韩版码免费福利视频| 91高清免费国产自产拍2021| 免费黄色网址入口| 色在线亚洲视频www| 99re热免费精品视频观看| 亚洲欧洲校园自拍都市| 曰批全过程免费视频播放网站 | 亚洲乱码一二三四区麻豆| 搜日本一区二区三区免费高清视频| 日韩在线观看免费完整版视频| 日韩a级无码免费视频| 在线精品亚洲一区二区三区| 成人A毛片免费观看网站| 亚洲色偷拍区另类无码专区| 九九久久精品国产免费看小说| 最近中文字幕电影大全免费版| 国产在线19禁免费观看| 深夜福利在线免费观看| 亚洲中文字幕丝袜制服一区| 日韩免费视频一区二区| 亚洲日本乱码卡2卡3卡新区| 国产色爽免费视频| 国产大片免费天天看| 亚洲国产精品线在线观看| 香蕉97超级碰碰碰免费公| 国产亚洲成在线播放va| 亚洲中文字幕无码日韩| 最近最新高清免费中文字幕 | 亚洲免费视频观看| 亚洲一级免费视频| 国产jizzjizz免费看jizz| 国产精品无码永久免费888| 久久国产亚洲电影天堂| 成人免费一区二区无码视频| 亚洲av无码成人影院一区| 亚洲色精品vr一区二区三区| 男女免费观看在线爽爽爽视频 | 亚洲精品第一国产综合亚AV| 亚洲AⅤ视频一区二区三区| 一级毛片在线免费看| 亚洲av无码专区首页|