和为sum的两个数字

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

思路:两个指针,两边到中间。。。。

public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        int n=array.length,start=0,end=n-1;
        ArrayList<Integer> res=new ArrayList<Integer>();
        if(n<2)return res;
        while(start<end){
            long s=array[start]+array[end];
            if(s==sum){
                res.add(array[start]);
                res.add(array[end]);
                break;
            }else if(s>sum) end--;
            else start++;
        }
        return res;
    }
时间: 2024-12-24 14:43:44

和为sum的两个数字的相关文章

剑指Offer39 数组中寻找和为sum的两个数字

1 /************************************************************************* 2 > File Name: 39_TwoNumbersWithSum.cpp 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年09月03日 星期六 11时14分49秒 6 *******************************

程序员面试100题之十:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值(转)

能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解. 假如有如下的两个数组,如图所示: 5,6,1,4,7,9,8 给定Sum= 10 1,5,6,7,8,9 给定Sum= 10 分析与解法 这个题目不是很难,也很容易理解.但是要得出高效率的解法,还是需要一番思考的. 解法一 一个直接的解法就是穷举:从数组中任意取出两个数字,计算两者之和是否为给定的数字. 显然其时间复杂度为N(N-1)/2即O(N^2).这个算法很简

和为s的两个数字

牛客上要求返回乘积最小的,实际上不用麻烦去写另外一个函数,第一次找到两个数字的乘积就一定是最小的. 在调试程序时也遇到两个问题: 1.既然用到了vector容器,头文件就应该声明#include<vector> 2.vector的初始化的一种方式: int b[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};    vector<int> base(b,b+20); class Solution { public:

编程算法 - 和为s的两个数字 代码(C)

和为s的两个数字 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个递增排序的数组和一个数字s, 在数组中查找两个数, 使得它们的和正好是s. 假设有多对数字的和等于s, 输出随意一对就可以. 排序数组, 则能够从两端(即最大值, 最小值)開始进行查找, 当和大于时, 则降低前端, 当和小于时, 则递增尾端. 时间复杂度O(n). 代码: /* * main.cpp * * Created on: 2014.6.12 * Author

找出升序数组中和为给定值的两个数字

输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.如果有多对数字的和等于输入的数字,输出任意一对即可. 详细描述: 接口说明 原型: bool FindTwoNumbersWithSum(int aData[], unsignedint uiLength, int sum, int *pNum1, int *pNum2); 输入参数: int aData[]           // 升序数组 unsigned int uiLength // 数组元

和为S的两个数字VS和为S的连续正数序列

题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. 思路:最初我们找到数组的第一个数字和最后一个数字.首先定义两个指针,第一个指针指向数组的第一个(也就是最小的)数字,第二个指针指向数组的最后一个(也就是最大的)数字.当两个数字的和大于输入的数字时,把较大的数字往前移动:当两个数字的和小于数字时,把较小的数字往后移动:当相等时,打完收工.这样扫描的顺序是从数组的两端向数组的中间扫描. #include "stdafx.

经典算法学习——快速找出数组中两个数字,相加等于某特定值

这个算法题的描述如下:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值.目前我假设数组中的都是各不相等的整数.这道题是我在一次面试中被问到的,由于各种原因,我没回答上来,十分尴尬.其实这道题十分简单,我们使用相对巧妙的方法来实现下.注意不使用两层循环的元素遍历.示例代码上传至:https://github.com/chenyufeng1991/SumTo100 . 算法描述如下: (0)首先对原数组进行排序,成为递增数组: (1)对排序后的数组头部i [0]和数组尾部j [n-1]

和为S的两个数字(剑指offer)指针O(n)

和为S的两个数字 参与人数:1186时间限制:1秒空间限制:32768K 通过比例:26.97% 最佳记录:0 ms|0K() 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 思路:在递增序列中找两个数使得和为S,积最小,那么那么这两个数的差越大,积越小.我定义两个指针一个指在开头,一个指在结尾,用他们的和与S比较,如果大了,尾指针向前移动:如果小了

和为S的两个数字-剑指Offer

和为S的两个数字 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述 对应每个测试案例,输出两个数,小的先输出. 思路 从两头开始遍历数组,若和小于sum,left++,若和大于sum,right-- 两头的数的乘积比中间的数的乘积小 代码 import java.util.ArrayList; public class Solution { public ArrayList<Integer> F