日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

leetcode(3)——697. 数组的度(C++版本注释)(map容器),448. 找到所有数组中消失的数字(取余操作,C++中的auto类型)

發(fā)布時(shí)間:2025/1/21 c/c++ 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode(3)——697. 数组的度(C++版本注释)(map容器),448. 找到所有数组中消失的数字(取余操作,C++中的auto类型) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 前言
  • 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。