和为S的两个数字

和为S的两个数字

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

同样的思路双指针法,我发现排序数组分析一般都用这个方法

 public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        ArrayList<Integer> res= new ArrayList<>();
        int i = 0,j=array.length-1;

        int ij=Integer.MAX_VALUE;
        while(i<j){
            int sumV = array[i]+array[j];
            if(sumV>sum){
               j--;
            }else if(sumV<sum){
               i++;
            }else{
                if(ij>i*j){
                    res.clear();
                    res.add(array[i]);
                    res.add(array[j]);
                    ij=i*j;
                }
                i++;
            }
        }
        return res;
    }
全部评论
双指针就不用看乘积了,第一组就是最小的
点赞 回复 分享
发布于 2021-05-14 18:29
else{ if(ij>i*j){ res.clear(); res.add(array[i]); res.add(array[j]); ij=i*j; } i++; } 这里不应该用下标i,j相乘,应该用值array[i],array[j]相乘吧
点赞 回复 分享
发布于 2021-04-22 20:57
想问为什么else的if返回i++
点赞 回复 分享
发布于 2021-04-16 10:24
为什么要clear一下呢?防止原先有数据?
点赞 回复 分享
发布于 2020-08-18 11:44

相关推荐

10-16 23:21
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
7
1
分享

创作者周榜

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