例1
题号:剑指offer 03, 难度:简单
题目描述:
解题思路:
设置一个数组存每个数字出现过多少次。最后便利一下数组,就知道哪些数字重复了几次。
还能联想到有一道“寻找消失的数”的题,进阶要求是用一个数组完成,也是遍历数组,以数字为下标把出现过的数的下标的值变为负数,最后遍历数组,值是正数的下标就是没出现过得。
具体代码:
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
int nums1[nums.size()];
int ans = 1;
//数组初始化全0
for(int i = 0; i < nums.size(); i++)
nums1[i] = 0;
//记录所有数字出现的次数
for(int i = 0; i < nums.size(); i++)
nums1[nums[i]]++;
//找到其中重复的数字
for(int i = 0; i < nums.size(); i++)
{
if(nums1[i] > 1 )
{
ans = i;
}
}
return ans;
}
};
例2
题号:剑指offer 53-II, 难度:简单
题目描述:
解题思路:
书上用的二分查找和递归,明天学习一下。这道题跟上面那题区别就是0到n 变成0到n-1了,我在nums末尾填上个零,最后统计元素个数的时候再把0的个数-1。
具体代码:
class Solution {
public:
int missingNumber(vector<int>& nums) {
nums.push_back(0);
int nums1[nums.size()];
int ans = 1;
//数组初始化全0
for(int i = 0; i < nums.size(); i++)
nums1[i] = 0;
//记录所有数字出现的次数
for(int i = 0; i < nums.size(); i++)
nums1[nums[i]]++;
nums1[0] -= 1;//去掉末尾新添的0
//找到其中重复的数字
for(int i = 0; i < nums.size(); i++)
{
if(nums1[i] == 0 )
{
ans = i;
}
}
return ans;
}
};
例3
题号:剑指offer 53-II, 难度:简单
题目描述:
解题思路:
明天研究一下二分查找再补上。
具体代码:
总结