剑指offer——和为s的两个数字且乘积最小
2016-07-22 19:44
246 查看
问题描述:
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。思路:
可以设定两个指针,第一个指针指向数组的第一个元素,第二个指针指向最后一个元素,不断改变第一个指针的位置就可以确定和为S的两个数字。这里还有一个要求是这两个数字的乘积最小,实际上由于数组是递增排序的,所以第一个找到的两个数字就是乘积最小的两个数字,相反如果要求是乘积最大的呢?当然是中间位置找到的那两个数字了。这是数学上的知识了,不再赘述。所以虽然有了乘积最小的要求,实际上是形同虚设的。代码实现:
import java.util.ArrayList; public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> result = new ArrayList<Integer>(); if(array == null||array.length == 0) return result; int low = 0; int high = array.length-1; while(low<high){ if(array[low]+array[high] == sum){ //由于数组是递增排序的,所以第一个找到的数对肯定是乘积最小的。 //比如,1+4=2+3,如果从第一个位置开始找的话,显然1与4的乘积是最小的 result.add(array[low]); result.add(array[high]); break; }else if(array[low]+array[high] < sum){ low++; }else{ high--; } } return result; } }
相关文章推荐
- H5 项目实用
- 在js中如何实现与脱拽,移动,还有吸附功能
- 基于MVC+EasyUI的Web开发框架经验总结(1)-利用jQuery Tags Input 插件显示选择记录
- 【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式
- 拼图游戏的艺术
- Bootstrap 折叠(Collapse)插件制作侧边栏导航菜单
- JSP中文乱码总结
- node V4.47版本,傻瓜式安装!(终于让俺装上了)
- javascript面向对象学习笔记——创建对象(转)
- 入坑,使用第三方SDK开发mavenJspWeb项目
- 盒子在浏览器中所占空间-width\height\padding\border\margin
- Gson将json转Map的那些坑
- 使用正则表达式解析Url字符串
- jQuery学习<六> — — Dom元素的特性(attribute)和属性(property)
- css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
- AngularJS按需动态加载template和controller?
- JavaScript框架思想3
- D3.js用动画渲染数据集的显示
- CSS布局 ——margin重叠
- HTML5 LocalStorage 本地存储