【编程之美】2.12快速寻找满足条件的两个数

给一个数组,找出其中一对和为sum的数字。

由于已经做过排好序的数组,找和为sum的题目。所以完全没有过多考虑就排了序,左右指针相互收缩着寻找。

跟答案上的方法也是一样的。

/*
start time = 16:57
end time = 17:15
*/
#include <iostream>
#include <stdlib.h>
using namespace std;

//由小到大排
int cmp(const void * a, const void * b)
{
    return *((int *)a) - *((int *)b);
}
bool get_TwoNumber(int * a, int len, int sum)
{
    int i, j;
    qsort(a, len, sizeof(a[0]), cmp);
    for(i = 0, j = len - 1; i < j;)
    {
        if(a[i] + a[j] == sum)
        {
            cout << a[i] << " + " << a[j] << " = "<< sum << endl;
            return true;
        }
        else if(a[i] + a[j] < sum)
        {
            i++;
        }
        else
        {
            j--;
        }
    }
    cout << "no vaild num!" << endl;
    return false;
}

int main()
{
    int a[10] = {5,6,1,4,7,9,8};
    get_TwoNumber(a, 7, 10);
    return 0;
}
时间: 2024-11-06 10:22:10

【编程之美】2.12快速寻找满足条件的两个数的相关文章

编程之美2.12 快速寻找满足条件的两个数

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

编程之美2.12 高速寻找满足条件的两个数

  这道题目的意思是,在一个数组中寻找两个数.使这两个数的和等于给定的数(找到随意一组就能够了).       题目读完之后,感觉这道题目还是非常easy的.就是遍历数组呗,走两遍,即能够在O(n2)时间复杂度内解决问题. 只是,细致想想之后.复杂度还是能够减少的.       首先,我们能够对数组进行排序,这样,得到的数组就是一个有序数组(如果数组是递增的).那么,我们能够利用两个指针.一个指针指向数组的第一个元素,一个指针指向数组的最后一个元素.所以,就是两个指针分别指向两个最值.然后前后每

2.12 快速寻找满足条件的两个数

题目:一个数组,快速找出两个数的和,使得这个和等于给定的另外一个数 思路:先排序,然后首尾两个指针,i.j,如果和等于给定的数,则找到,如果小于的话,则I++,如果大于的话,则J-- 代码: #include <iostream> #include <algorithm> #define MAXN 10000 using namespace std; int n, sum; int a[MAXN]; int main() { cin >> n >> sum;

快速寻找满足条件的两个数

时间:2014.07.17 地点:基地 ------------------------------------------------------------------------------------- 一.问题描述 给定一个数组,要求快速查找出其中的两个值,他们的和为一个给定的值. 比如给定数组:1 4 5 6 8  9,和给定值9,我们能找出4+5=9为所要的数值 ------------------------------------------------------------

第2章 数字之魅——快速寻找满足条件的两个数

快速寻找满足条件的两个数 问题描述 能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的数字,为了简化起见,我们假设这个数组中肯定存在这样一组或以上符合要求的解. 分析与解法 [解法一] 代码如下: 1 package chapter2shuzizhimei.findtwonumber; 2 /** 3 * 快速寻找满足条件的两个数 4 * [解法一] 5 * @author DELL 6 * 7 */ 8 public class FindTowNumber1 { 9 //定义一个

【编程之美】快速寻找满足条件的两个数

能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解. 分析与解法 方法一:枚举 从数组中任取两个数字,判断是否满足条件. 显然时间复杂度为N(N-1)/2,即O(N2). 方法二:查找 我们可以把问题进行转化:对于任意数arr[i],查找sum-arr[i]是否在数组中. (1) 一般查找 在不做处理的情况下直接在数组中查找sum-arr[i]的时间复杂度为O(N),总时间复杂度仍为O(N2). (2) 折半查找 显然

数字之魅:快速寻找满足条件的两个数

能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的数字,为了简化起见,我们假设数数组中肯定存在这样一组以上符合要求. 这个题目看起来其实并不难,但是仔细想想还是有许多值得思考的地方. 方案一:常人常规蛮力法.穷举法,需要找数据我们就挨个找,总是能找出来,就是时间问题,我么一次列举每一个数和后一个数的和看是否与目标值相等.但是其时间复杂度为O(N*N). 方案二:由于是查找,我们就可以对其进行排序操作,先排序再查找.为什么要排序呢?这里可以将问题转化一下?既然是寻找和为Sum的两个数

编程之美-2.11 扩展 寻找距离最远的两个点

一.问题描述 平面上有n个点,如何寻找距离最远的两个点? 二.解题思路 第一步,寻找凸包(因为最远距离的两个点一定在凸包上) 第二步,用旋转卡(qia)壳 寻找距离最大的点 凸包和旋转卡壳算法参见http://blog.csdn.net/kaytowin/article/details/5140111 三.代码实现 #include<iostream> #include<vector> #include<algorithm> #include<cmath>

编程之美之2.5 寻找最大的K个数

[题目] 有很多无序的数,从中找出最大的K个数.假定他们都不相等. [解法一] 如果数据不是很多,例如在几千个左右,我们可以排一下序,从中找出最大的K个数.排序可以选择快速排序或者堆排序 [cpp] view plaincopy #include<stdio.h> #include<stdlib.h> int cmp(const void *a,const void *b){ return *(int *)a - *(int *)b; } int main(){ int n,k;