剑指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  ************************************************************************/
 7
 8 #include <stdio.h>
 9
10 bool FindNumberWithSum(int* nums, int length, int sum, int* num1, int* num2)
11 {
12     bool ret = false;
13     if (length<1 || num1==NULL || num2==NULL)
14         return ret;
15
16     int left  = 0;
17     int right = length - 1;
18
19     while (right > left)
20     {
21         int current = nums[left] + nums[right];
22         if (current == sum)
23         {
24             *num1 = nums[left];
25             *num2 = nums[right];
26             ret = true;
27             return ret;
28         }
29         else if (current > sum)
30             right --;
31         else
32             left ++;
33     }
34     return ret;
35 }
36
37 int main()
38 {
39     int nums[] = {1,2,4,7,11,15};
40     int length = 6;
41     int sum = 15;
42     int num1, num2;
43
44     if (FindNumberWithSum(nums, length, sum, &num1, &num2))
45         printf("%d, %d\n", num1, num2);
46     else
47         printf("Not Find\n");
48     return 0;
49 }
时间: 2024-11-15 19:40:25

剑指Offer39 数组中寻找和为sum的两个数字的相关文章

《剑指offer》第五十六题I:数组中只出现一次的两个数字

// 面试题56(一):数组中只出现一次的两个数字 // 题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序 // 找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). #include <cstdio> unsigned int FindFirstBitIs1(int num); bool IsBit1(int num, unsigned int indexBit); void FindNumsAppearOnce(int data[], int

73. 数组中只出现一次的两个数字

异或运算,看视频吧.AcWing 73. 数组中只出现一次的两个数字 https://www.acwing.com/solution/acwing/content/1324/ 假设这2个数为x,y 1.对所有数进行异或,相同的2个数执行异或后的值为0.结果就是x⊕y. 2.异或运算的性质:.若a是二进制数0101,b是二进制数1011:则a⊕b=1110 ,只有在两个比较的位不同时其结果是1,否则结果为0. 可以肯定的是,x⊕y的结果有某一位k是1.利用第k位是1,将数组分成2类数组,数组m是Z

剑指offer 数组中的逆序对

题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000000007 输入描述: 题目保证输入的数组中没有的相同的数字 数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%100的数据,size<=2*10^5 示例1 输入 1,2,3,4,5,6,7,0 输出 7 思路:归并排序的思路.具体参考剑指

剑指 Offer —— 数组中重复的数字

数组中的重复数字 题目描述 牛课网链接 长度为 n 的数组里,所有数字都在 0 到 n-1 的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 7 的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字 2 或者 3.(牛课网这里弄成「那么对应的输出是第一个重复的数字 2」了) A 简单实现思路 借助外部数组 b,原数组中的数字记为外部数组的下标,外部数组的值来存储这个数字出现的次数.原数组中

剑指offer——数组中出现次数超过一半的数字(c++)

题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如果不存在则输出0. 思路一遍历数组是保存两个值:一个是数字中的一个数字,另一个是次数.当遍历到下一个数字的时候,如果下一个数字和之前保存的数字相等,则次数加1:如果不同,则次数减1:如果次数为零,那么我们需要保存下一个数字,并把次数设置为1.由于我们要找的数字出现的次数比其他所有数字出现的次数之和还

剑指offer_数组中的逆序对

题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P. 并将P对1000000007取模的结果输出. 即输出P%1000000007 本题采用归并排序,归并排序算法我在前一篇博客里写到过,在那个基础上进行修改即可!(强烈建议先理解归并排序的具体算法后,再来做此题) public class Solution36 { private int count = 0; //记录次数 private int[] copy ;

剑指offer——数组中的逆序对

数组中的逆序对 **(不会)数据结构--小和问题 逆序对问题 原文地址:https://www.cnblogs.com/SkyeAngel/p/8978980.html

python剑指offer数组中出现次数超过一半的数字

题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如果不存在则输出0. 思路: 两种思路.第一种思路,出现次数超过一半的数字,不管如何,必然这个数字位于数组中间的位置,因此可以采用类似于快排的划分的方法,找到位于数组中间的位置的数字,然后在顺序检索是否这个数字出现次数超过一半.第二种思路根据数组的特点,出现次数超过一半的数,他出现的次数比其他数字出

剑指Offer40:数组中只出现一次的数字(Java)

参考hezhiyao的博客 https://www.cnblogs.com/hezhiyao/p/7539024.html 参考qmss的博客 https://www.jianshu.com/p/c308e4a1e19f 参考Raise的博客 https://blog.csdn.net/linraise/article/details/9425319 思路分析: 利用两个相同的数异或为0的性质,两个不为零且不同的数异或运算结果的二进制形式一定有1的性质 解题步骤: 1. 把数组从左到右全部异或运