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 存儲(chǔ)數(shù)字第一次出現(xiàn)的位置索引if (startIndex.count(nums[i]) == 0) startIndex[nums[i]] = i;// cout 存儲(chǔ)對(duì)應(yīng)數(shù)字出現(xiàn)的次數(shù)count[nums[i]]++;//如果出現(xiàn)相同頻次的數(shù)字,那么就算這個(gè)數(shù)所組成的連續(xù)數(shù)組長(zhǎng)度;最后取上一個(gè)數(shù)所組成的連續(xù)數(shù)組長(zhǎng)度與這個(gè)數(shù)所組成的連續(xù)數(shù)組長(zhǎng)度中最小的那個(gè);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;} };思路
記錄每個(gè)數(shù)第一次出現(xiàn)的位置(因?yàn)橐业胶椭鲾?shù)組擁有相同的度的最短的數(shù)組的長(zhǎng)度),再找到每個(gè)數(shù)出現(xiàn)的頻率(為了找到出現(xiàn)次數(shù)的最多的數(shù),確定其數(shù)組的度).
收獲
map容器
map
448
題目描述:
給定一個(gè)范圍在 1 ≤ a[i] ≤ n ( n = 數(shù)組大小 ) 的 整型數(shù)組,數(shù)組中的元素一些出現(xiàn)了兩次,另一些只出現(xiàn)一次。
找到所有在 [1, n] 范圍之間沒有出現(xiàn)在數(shù)組中的數(shù)字。
您能在不使用額外空間且時(shí)間復(fù)雜度為O(n)的情況下完成這個(gè)任務(wù)嗎? 你可以假定返回的數(shù)組不算在額外空間內(nèi)。
程序
力扣官方解題思路
/****************************448. 找到所有數(shù)組中消失的數(shù)字**********************/vector<int> findDisappearedNumbers(vector<int>& nums) {// 首先所有數(shù)值x都在數(shù)組nums長(zhǎng)度n之內(nèi),那么所有nums[x-1]都應(yīng)該在nums長(zhǎng)度之內(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ù)后面的值,來自己推測(cè)前面的類型是什么。
auto的作用就是為了簡(jiǎn)化變量初始化,如果這個(gè)變量有一個(gè)很長(zhǎng)很長(zhǎng)的初始化類型,就可以用auto代替。
如果是可用迭代器的對(duì)象的話,就像上面的程序所示,auto在這里就是簡(jiǎn)單的替換了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类型)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器人运动规划调研(pending)
- 下一篇: s3c2440移植MQTT