![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程题之数组类
qq_33436509
这个作者很懒,什么都没留下…
展开
-
二维数组的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:从左下开始比较,如果target大于左下元素 j++继续,如果小于左下元素 i-- 继续。相等则返回。class Solution {public: bool Find(int ...原创 2018-08-08 12:27:35 · 78 阅读 · 0 评论 -
旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:二分查找的变换,也是利用二分查找缩小范围的特性。两个下标分别指向数组第一个元素和最后一个元素。找中间元素和第一...原创 2018-08-08 13:00:33 · 88 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。1,如果没有后面红色的要求,可以遍历数组,遇到偶数,把偶数后面的数前移一位,最后一个一位给这个偶数for(int i=0;i<length;i++) { if(array[...原创 2018-08-08 13:10:29 · 131 阅读 · 0 评论 -
数组中出现的次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路:遍历数组,保存数和次数,如果不下一个元素不一样时,就次数--,一样就++。如果减到0,就保存当前数继续。最后保存的数肯定就是最后一次设次数为1 的数。最后还要判断这个数的次数是...原创 2018-08-08 13:22:01 · 125 阅读 · 0 评论 -
最大连续子数组的和
例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和思路:一个数之前的和是正的,则加上这个数。判断此时的和与最大和比较,大于就赋给最大和变量,如果一个数之前的和是负的,此时和是这个数。 class Solution {public: int FindGreatestSumOfSub...原创 2018-08-08 13:26:08 · 163 阅读 · 0 评论 -
统计一个数字在排序数组中出现的次数
思路:找第一个和最后一个这个数字 然后下标相减加1利用二分查找的特性,当找到k值时,判断它是不是第一个或者是最后一个k值,算法是,找第一个k值:找到一个k时,判断前一个数是不是k,如果不是则它是第一个,如果是k,end=mid-1,递归下去。找最后一个k,判断它后面的数是不是k值,如果不是则它是最后一个,不是则start=mid+1,递归。class Solution {public:...原创 2018-08-08 13:43:04 · 472 阅读 · 0 评论 -
数组中只出现一次的两个数字
一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。思路:所有的数异或,异或的结果中找出第一次出现1的位置 把数组分为两个部分,每个部分做异或,就可以出来了。这个出现1的位置是两个只出现一次的数的异或结果,现在要把这两个数分开。分成两个子数组,在做异或class Solution {public: void FindNumsAp...原创 2018-08-08 14:05:00 · 90 阅读 · 0 评论 -
和为s的两个数字
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的思路:前后两个指针分别指向数组第一个元素,和最后一个元素,相加如果等于则找到了,大于则后面一个指针--,小于则前面一个指针++。特别注意如果出现很多对,则第一对为所求,有证明方法class Solution {public: vector&l...原创 2018-08-08 14:13:27 · 84 阅读 · 0 评论 -
和为s的连续整数序列
思路:small=1,big=2,如果大于sum,则small++,如果小于big++,直到small到(sum+1)/2为止(因为至少要两个数,如果small大于等于这个,small加上big肯定会大于sum,small再++,也没有办法与sum相等)。如果满足条件,则big++,继续。 class Solution {public: vector<vector&l...原创 2018-08-08 14:24:03 · 149 阅读 · 0 评论