【题57】和为s的数字——和为s的两个数字

今天药忘吃喽~ 2022-02-28 14:46 296阅读 0赞

【题目】
输入一个递增排序的数组和一个数组s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一堆即可。
例,{1,2,4,7,11,15} 和数字15 由于4+11 = 15 因此输出4 和11.

【思路】
因为数组排好序,选择两个数字,
如果它们的和等于输入的s,就找到了
如果它们的和小于输入的s,考虑选择较小数字的后面的数字
如果它们的和大于输入的s,考虑选择较大数字的后面的数字
在这里插入图片描述

【实现】

  1. import java.util.ArrayList;
  2. public class Solution {
  3. public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
  4. ArrayList<Integer> list = new ArrayList<Integer>();
  5. if(array == null || array.length < 2) return list;
  6. int i = 0,j = array.length-1;
  7. while(i < j){
  8. if(array[i] +array[j] == sum){
  9. list.add(array[i]);
  10. list.add(array[j]);
  11. return list;
  12. }else if(array[i]+array[j] > sum){
  13. j--;
  14. }else{
  15. i++;
  16. }
  17. }
  18. return list;
  19. }
  20. }

在这里插入图片描述
参考:
1.《剑指offer》

发表评论

表情:
评论列表 (有 0 条评论,296人围观)

还没有评论,来说两句吧...

相关阅读

    相关 s数字

    题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 由于数组是排序的,采用双指针