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

和为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;

    }
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 13:54
点赞 评论 收藏
分享
07-07 11:33
江南大学 Java
已经在暑假实习了&nbsp;,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
fRank1e:吓得我不敢去外包了,但是目前也只有外包这一个实习,我还要继续去吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务