<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本道一区二区三区四区| 亚洲精品在线视频| 曰皮全部过程视频免费国产30分钟| 99re在线精品视频免费| 水蜜桃视频在线观看免费播放高清| 国产精品亚洲lv粉色| 亚洲综合av一区二区三区不卡| 亚洲精品午夜在线观看| 亚洲av无码不卡| 亚洲乱码一区二区三区在线观看| 亚洲AV无码一区二三区| 国产成人免费手机在线观看视频| 青青草免费在线视频| 69式国产真人免费视频| 67194国产精品免费观看| 99re这里有免费视频精品 | 大地资源二在线观看免费高清| 99在线观看精品免费99| 久久精品免费观看国产| 精品成人免费自拍视频| 免费a级毛片无码a∨免费软件| 久久av免费天堂小草播放| 一级日本高清视频免费观看| 免费在线人人电影网| 特级无码毛片免费视频| 日韩在线观看免费| j8又粗又长又硬又爽免费视频| 国产免费区在线观看十分钟| 中文字幕在线视频免费观看| 99在线免费视频| 午夜免费啪视频在线观看 | 亚洲精品综合久久中文字幕| 4480yy私人影院亚洲| 亚洲精品国产成人| 亚洲国产乱码最新视频| 亚洲人成色77777在线观看| 亚洲中文字幕久久精品无码VA|