zoukankan      html  css  js  c++  java
  • 算法:数组中和为s的两个数字

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

    输出描述:
    对应每个测试案例,输出两个数,小的先输出。
    @思路: 两个数之和一定,差越大,积越小;
    1:排除数组为空以及数组长度不够的情况;
    2:通过两边往中间靠近的原则
    3:while循环,当头小于尾的时候,将符合条件的放入list;
    4:当和大于给定的数时,两端的指针往中间靠近;

    package LG.nowcoder;
    
    import java.util.ArrayList;
    
    /**
     * @Author liguo
     * @Description 和为S的两个数字
     * @问题 :题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,
     * 如果有多对数字的和等于S,输出两个数的乘积最小的。
     * 输出描述:
     * 对应每个测试案例,输出两个数,小的先输出。
     * @思路: 两个数之和一定,差越大,积越小;
     * 1:排除数组为空以及数组长度不够的情况;
     * 2:通过两边往中间靠近的原则
     * 3:while循环,当头小于尾的时候,将符合条件的放入list;
     * 4:当和大于给定的数时,两端的指针往中间靠近;
     * @Data 2018-09-07 23:31
     */
    public class Solution20 {
        public ArrayList <Integer> FindNumbersWithSum(int[] array, int sum) {
            ArrayList <Integer> list = new ArrayList <Integer>();
            if (array == null || array.length < 2) {
                return list;
            }
            int index = 0, end = array.length - 1;
            while (index < end) {
                if (array[index] + array[end] == sum) {
                    list.add( array[index] );
                    list.add( array[end] );
                    return list;
                } else if (array[index] + array[end] > sum) end--;
                else index++;
            }
            return list;
        }
    }

  • 相关阅读:
    Java各种数据结构实现
    Lintcode答案&笔记
    JavaScript之onclick事件
    CSS3过渡结束监听事件,清除/修改表单元素的一些默认样式
    移动端自动调整根元素字体大小
    手机移动端事件封装
    js 拖拽 鼠标事件,放大镜效果
    CSS 常用属性之 阴影
    CSS常用属性之选择器
    全屏banner及全屏轮播
  • 原文地址:https://www.cnblogs.com/liguo-wang/p/9607669.html
Copyright © 2011-2022 走看看