zoukankan      html  css  js  c++  java
  • 和为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;
        }
    }

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

  • 相关阅读:
    校验身份证号、邮箱、手机号
    星级评分插件
    JS 实现轮播图
    js 禁止网页后退
    删除Redis缓存
    分析器错误,未能加载类型
    Vue 禁止按钮重复提交
    Vue 页面加载前显示{{代码}}的原因及解决办法 PC端
    设计模式之策略模式
    数据库索引知识到MySQL InnoDB
  • 原文地址:https://www.cnblogs.com/Dream-chasingGirl/p/10222572.html
Copyright © 2011-2022 走看看