IT公司100题-14-排序数组中和为给定值的两个数字

本文介绍了一种优化方法来解决在升序数组中找到两个数之和等于给定目标值的问题,通过双指针技巧从两端向中间逼近,实现了效率更高的搜索过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

输入一个升序排序的数组,给定一个目标值target,求数组的两个数a和b,a+b=target。如果有多个组合满足这个条件,输出任意一对即可。

例如,输入升序数组【1, 3, 4, 5, 13, 17】和目标值20。输出3和17。

分析:

最简单的办法,直接遍历,时间复杂度为O(n^2)。

双下标法:low和high

a[low]+a[high] < target, low++;

a[low]+a[high] > target, high–;

a[low]+a[high] == target, return low and high;

代码实现如下所示:

package oschina.IT100;

/**
 * @project: oschina
 * @filename: IT13.java
 * @version: 0.10
 * @author: JM Han
 * @date: 12:08 PM 12/15/2015
 * @comment: find two number in an incredent list whose sum is given
 * @result:
 */

public class IT13 {
   public static boolean findTwo(int[] arr, int sum){
      int i = 0;
      int j = arr.length - 1;
      boolean flag = true;
      while(flag && (i < j)){
         if((arr[i] + arr[j]) < sum){
            i++;
         } else if ((arr[i] + arr[j]) > sum){
            j--;
         } else{
            System.out.println("i: " + i + " j: " + j);
            flag = false;
         }
      }
      return flag;
   }

   public static void main(String[] args) {
      int[] array = {1,3,4,5,13,17,18};
      findTwo(array, 25);
   }
}


转载于:https://my.oschina.net/jimmyhan/blog/544513

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值