• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
追梦女孩Y2
博客园    首页    新随笔    联系   管理    订阅  订阅
和为S的两个数字

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

思路分析:这个可以利用上一个的双指针的做法,但是不是连续的,所以需要从头和尾开始。看两个的和与S的大小,如果比S大,需要找一个小点的数,尾指针左移,如果比S小,需要找一个大点的数,头指针右移,直到相等为止。举例如下图:

代码如下:

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        if(array==null||array.length<2)
        {
            return list;
        }
        int plow = 0;
        int phigh = array.length-1;
        while(plow<phigh)
        {
            int n = array[plow]+array[phigh];
            if(n==sum)
            {
                list.add(array[plow]);
                list.add(array[phigh]);
                return list;
            }
            else if(n<sum){
                plow++;
            }
            else{
                phigh--;
            }
        }
        return list;
    }
}

反思:本题是递增序列可以利用双指针的做法,如果是递减序列也是同样的道理。看来这个双指针还是有很大好处的!

posted on 2019-01-04 21:24  追梦女孩Y2  阅读(124)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3