【剑指Offer-知识迁移能力】有序数组中和为S的两个数字
2018-01-27 14:36
429 查看
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。解题思路
由于是递增排序的数组,所以,我们可以使用两个指针,一个从前往后指向较小的数,一个从后往前指向较大的数,这样找到的两个数的乘积必然最小。当两数的和大于S时,较大的数字指针向左移动,当两数的和小于S时,较小的数字指针向右移动,当两数靠近时,查找结束。代码实现
import java.util.ArrayList; public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> result = new ArrayList(); if(array == null || array.length < 2){ return result; } // small指向小数字位置的指针 int small = 0; // big指向大数字位置的指针 int big = array.length - 1; int curSum = array[small] + array[big]; // 让两个数字的位置不断靠近 while(small < big){ if(curSum == sum){ result.add(array[small]); result.add(array[big]); return result; } if(curSum > sum){ big--; } if(curSum < sum){ small ++; } curSum = array[small] + array[big]; } return result; } }
相关文章推荐
- (C++)剑指offer-42:和为S的两个数字(知识迁移能力)
- (C++)剑指offer-37:数字在排序数组中出现的次数(知识迁移能力)
- (C++)剑指offer-40:数组中只出现一次的数字(知识迁移能力)
- 剑指offer 41题【知识迁移能力】和为S的两个数字
- 剑指offer 38题 【知识迁移能力】数字在排序数组中出现的次数
- 剑指offer 6.3 知识迁移能力1- 数字在排序数组中出现的次数
- 剑指offer 6.3 知识迁移能力4- 数组中只出现一次的数字
- 剑指offer 6.3 知识迁移能力5-和为s的两个数字
- 【剑指offer】6.3知识迁移能力——面试题38:数字在排序数组中出现的次数
- 【剑指offer】6.3知识迁移能力——面试题40:数组中只出现一次的数字
- 【剑指offer】6.3知识迁移能力——面试题41:和为s的两个数字VS和为s的连续正数序列
- 【剑指Offer-知识迁移能力】统计一个数字在排序数组中出现的次数。
- 【剑指offer】【41】找出升序数组中和为给定值的两个数字
- 剑指offer:(40)知识迁移 :数组中只出现一次的数字
- 码农小汪剑指Offer之40-和为S的两个数字(有序数组) 左右夹逼
- 剑指offer 算法 (知识迁移能力)
- (C++)剑指offer-43:左旋转字符串(知识迁移能力)
- 剑指Offer39 数组中寻找和为sum的两个数字
- 剑指offer 42题 【知识迁移能力】左旋转字符串
- (C++)剑指offer-44:翻转单词顺序列(知识迁移能力)