题解 | #数值的整数次方#

和为S的两个数字

http://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b

//看了这么多题解,很少用二分的
//我这个二分每次是半边二分,但比双指针一格移动要快些

 public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        //二分:主要思想是怎么把区间缩短一半
        /*
           思路:
            1)本题可以根据l + mid 来二分,也可以根据r + mid来二分
            做二分题时,只使用其中一个条件来分割区间就行,否则情况太多了,脑子容易乱

            2)也可以使用对撞双指针,不过每次只移动一格
        */
         ArrayList<Integer> res = new ArrayList<Integer>();
        if(array.length <= 0)
            return res;

        int l = 0;
        int r = array.length - 1;
        while(l + 1 < r){
            int mid = l + (r - l) / 2;
            if(array[l] + array[r] == sum){
                res.add(array[l]);
                res.add(array[r]);
                return res;
            }
            if(array[mid] + array[r] < sum){
                l = mid;
            }else if(array[mid] + array[r] > sum){
                r--;
            }else{
                res.add(array[mid]);
                res.add(array[r]);
                return res;
            }
        }
        //判断剩余
        if(array[l] + array[r] == sum){
                res.add(array[l]);
                res.add(array[r]);
                return res;
        }else
            return res;

    }
全部评论

相关推荐

预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
投递华为等公司10个岗位 >
点赞 评论 收藏
分享
11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务