leetcode(3)——697. 数组的度(C++版本注释)(map容器),448. 找到所有数组中消失的数字(取余操作,C++中的auto类型)
文章目錄
- 前言
- 697
- 程序
- 思路
- 收獲
- map容器
- 448
- 程序
- 收獲
- 取模操作的思考
- auto
前言
大佬的程序,邊刷邊總結(jié)邊學(xué)語言。
題目697
697
程序
class Solution { public:int findShortestSubArray(vector<int>& nums) {if (nums.size() < 2) return nums.size();map<int, int> startIndex, count;int len = nums.size(), fre = 0;for (int i = 0; i < nums.size() ;i++) {// startIndex 存儲數(shù)字第一次出現(xiàn)的位置索引if (startIndex.count(nums[i]) == 0) startIndex[nums[i]] = i;// cout 存儲對應(yīng)數(shù)字出現(xiàn)的次數(shù)count[nums[i]]++;//如果出現(xiàn)相同頻次的數(shù)字,那么就算這個數(shù)所組成的連續(xù)數(shù)組長度;最后取上一個數(shù)所組成的連續(xù)數(shù)組長度與這個數(shù)所組成的連續(xù)數(shù)組長度中最小的那個;if (count[nums[i]] == fre) {len = min(i - startIndex[nums[i]] + 1, len);}//記錄出現(xiàn)頻次更高的數(shù)所組成的連續(xù)數(shù)組的度if (count[nums[i]] > fre) {len = i - startIndex[nums[i]] + 1;fre = count[nums[i]];}}return len;} };思路
記錄每個數(shù)第一次出現(xiàn)的位置(因為要找到和主數(shù)組擁有相同的度的最短的數(shù)組的長度),再找到每個數(shù)出現(xiàn)的頻率(為了找到出現(xiàn)次數(shù)的最多的數(shù),確定其數(shù)組的度).
收獲
map容器
map
448
題目描述:
給定一個范圍在 1 ≤ a[i] ≤ n ( n = 數(shù)組大小 ) 的 整型數(shù)組,數(shù)組中的元素一些出現(xiàn)了兩次,另一些只出現(xiàn)一次。
找到所有在 [1, n] 范圍之間沒有出現(xiàn)在數(shù)組中的數(shù)字。
您能在不使用額外空間且時間復(fù)雜度為O(n)的情況下完成這個任務(wù)嗎? 你可以假定返回的數(shù)組不算在額外空間內(nèi)。
程序
力扣官方解題思路
/****************************448. 找到所有數(shù)組中消失的數(shù)字**********************/vector<int> findDisappearedNumbers(vector<int>& nums) {// 首先所有數(shù)值x都在數(shù)組nums長度n之內(nèi),那么所有nums[x-1]都應(yīng)該在nums長度之內(nèi),因此如果所有nums[x-1]+n>n,這是句廢話。// 然后遍歷所有+n操作之后的nums,就能找到?jīng)]有出現(xiàn)的i+1,即nums[i]<nint n = nums.size();for (auto&num : nums){int x = (num - 1) % n;nums[x] += n;}vector<int> list;for (int i; i < n;i++){if (nums[i] <= n)list.push_back(i+1);}return list;}收獲
取模操作的思考
int x = (num - 1) % n;這里是考慮了,有的元素在遍歷到之前就加過n了,所以要把多余的n去掉。
取模是把n,成塊成塊地從num中去掉,的到最后剩下的元素。
(num - 1) % n = num % n - 1%n;
auto
先附上大佬的鏈接
auto的原理就是根據(jù)后面的值,來自己推測前面的類型是什么。
auto的作用就是為了簡化變量初始化,如果這個變量有一個很長很長的初始化類型,就可以用auto代替。
如果是可用迭代器的對象的話,就像上面的程序所示,auto在這里就是簡單的替換了int類型:
int main(){vector<int>v;v.push_back(1);v.push_back(2);v.push_back(3);for(auto i : v){cout<<i<<" ";}cout<<endl;return 0; }總結(jié)
以上是生活随笔為你收集整理的leetcode(3)——697. 数组的度(C++版本注释)(map容器),448. 找到所有数组中消失的数字(取余操作,C++中的auto类型)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器人运动规划调研(pending)
- 下一篇: 解决GitHub报错:schannel: