之前不会排版,把word内容直接复制粘贴过来,没想到格式颜色都不对,空格也没用。这次刚看见的富文本编辑器。
  今天早晨复习了一下昨天的题,做的速度提高了,但是写完又报错,还找不出来为什么。感觉这样浪费时间比较多,打算调整下思路:
先直接全敲一遍,第二天复习的时候自己做,不熟练的、做错的,隔一段时间会回头重做。
例1
题号:448, 难度:简单
题目描述:
解题思路:
数组两用,数组里存值,(下标+1)记录是否存在该数。
具体代码:
class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
vector<int>ans;
int n = nums.size();
for(int i = 0; i < n; i++)
{
//以值+1为索引,整个数组的索引代表数字是否存在,存在的为负数,不存在的是正数
//特别要注意:nums[i]这个值有可能是负数,得取绝对值
int index = abs(nums[i]) - 1;
if(nums[index] > 0)
{
nums[index] = -nums[index] ;
}
}
for(int i = 0; i < n; i++)
{
//找到所有为正数的索引
if(nums[i] > 0)
{
ans.push_back(i + 1);
}
}
return ans;
}
};
运行结果:
总结:
要注意两点:
- 遍历到后面有重复数的时候,读出来的值可能是负数,如果直接拿去当下标会出现问题,要取绝对值
- nums[index]改成nums[ abs(nums[i]) - ]的话,运行时间会增加好多。第一遍写完代码后,可以提炼一下,看看有哪些重复的地方,可以新定义一个变量然后赋值。用变量表示的话就调用函数快一些。