求递增序列中和为S的乘积最小的两个数
来源:互联网 发布:聊天机器人对话数据库 编辑:程序博客网 时间:2024/06/06 20:23
不要小看每一道简单的题,把细节做好,把每一道简单的题做的漂亮,这就是一种能力。
牛客上有这样一道题:
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,
输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出
解题思路:
定义两个指针start=0,end=array.length-1,s = array[start]+array[end],然后夹逼遍历
1)s < sum,因为是递增序列,所以start++
2)s > sum, end--
3)s == sum, 在这个地方是可以优化的,普通的思路可能在这里判断乘积是不是小于之前的乘积,然后继续
遍历,其实因为这个序列是递增的,所以两头的乘积是最小的,及第一个s == sum就是我们所求的,证明如下:
x+y >= 2sqrt(x*y),
x*y <= ((x+y)/2)^2 = (sum^2)/4
y - x越大,乘积就越小,等号成立条件是x == y
下面附上代码,因为最近一直在学node,所以编程题都是用node来写:
function FindNumbersWithSum(array, sum){ // write code here if(array.length < 2) return []; var start = 0, end = array.length-1; while(start < end){ if(array[start]+array[end] < sum){ start++; }else if(array[start]+array[end] > sum){ end--; }else{ return [array[start],array[end]]; } } return [];}module.exports = { FindNumbersWithSum : FindNumbersWithSum};
0 0
- 求递增序列中和为S的乘积最小的两个数
- 递增数列中找和为s乘积最小的两个数
- 给定一个递增排序的数组和一个数字s,求数组中和为s的俩个数。求乘积最小的俩个数
- 剑指Offer——查找递增数组中和为S的两个数
- 剑指offer 面试题41 递增数组中和为s的两个数字 | 和为s的连续整数序列
- 41-所有和为s的连续正数序列/递增数列中和为s的两个数字
- 输出递增数组中和为sum的两个数
- 找出集合S中和为X的两个数
- 《剑指offer》:[41]数组中和为S的两个数
- 剑指offer-数组中和为S的两个数
- 笔试题:求数组中和为sum的乘积最小的一对组合
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 面试金典之(一)找出和为SUM的递增数组array中的两个数使之乘积最小
- 求已排序数组中和为某个数的两个数
- 求最小子序列和 求最小的正序列 求最大子序列乘积
- Rails中嵌套表单的解决:模型关系是一对一和一对多的情况
- 第十六周项目一 直接排序法
- 第16周项目1 验证算法(8)基数排序
- Curl移植笔记
- 【SSH网上商城】--SSH简介
- 求递增序列中和为S的乘积最小的两个数
- 第十六周项目1-验证算法-堆排序
- 【Leetcode 434. Number of Segments in a String】
- 移动端学习
- 发布java项目或者web项目修改工程名字的问题
- yolo v2微调
- 第十六周--项目一(3)
- 前端开发必须知道的JS(一) 原型和继承
- ios cookie同步和管理偶尔失效问题