栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

剑指offer(四十二)-和为S的两个数字(Java版)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指offer(四十二)-和为S的两个数字(Java版)

描述

输入一个递增排序的数组array和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,返回任意一组即可,如果无法找出这样的数字,返回一个空数组即可。

数据范围:

0<=len(array)<=105

1<=array[i]<=106

示例1

输入:[1,2,4,7,11,15],15

返回值:[4,11]

说明:返回[4,11]或者[11,4]都是可以的

示例2

输入:[1,5,11],10

返回值:[]

说明:不存在,返回空数组

示例3

输入:[1,2,3,4],5

返回值:[1,4]

说明:返回[1,4],[4,1],[2,3],[3,2]都是可以的

第一种解法

双重循环即可,采用最笨的方式,外层从第一个开始循环,内层循环从第二个开始,取到符合要求的值返回即可。代码如下

public ArrayList firstFindNumbersWithSum(int [] array, int sum) {
        ArrayList list = new ArrayList<>();
        if(null == array || array.length < 1 || sum < 1){
            return list;
        }
        boolean flag = false;
        for (int i = 0; i < array.length; i++) {
            for (int j = i+1; j < array.length; j++) {
                if(array[i] + array[j] == sum){
                    list.add(array[i]);
                    list.add(array[j]);
                    flag = true;
                    break;
                }
                if(array[i] + array[j] > sum){
                    break;
                }
            }
            if(flag){
                break;
            }
        }
        return list;
    }

当然 第一种解法可以优化一些,在内层循环的时候,可以采用二分法来减少循环次数。

第二种解法

分别从左右两头开始循环,即从第一个往后开始循环,最后一个树往前开始循环,这样就只用循环一次便可以解决问题,代码如下

public ArrayList secondFindNumbersWithSum(int [] array, int sum) {
        ArrayList list = new ArrayList<>();
        if(null == array || array.length < 1 || sum < 1){
            return list;
        }
        int begin = 0;
        int end = array.length - 1;
        while (begin < end){
            int result = array[begin] + array[end];
            if(result == sum){
                list.add(array[begin]);
                list.add(array[end]);
                break;
            }else if(result < sum){
                begin++;
            }else {
                end--;
            }
        }
        return list;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/314672.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号