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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【三种解法实现】剑指 Offer 03. 数组中重复的数字

發布時間:2024/2/28 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【三种解法实现】剑指 Offer 03. 数组中重复的数字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

立志用最少的代碼做最高效的表達


題目鏈接——>傳送門


找出數組中重復的數字。

在一個長度為 n 的數組 nums 里的所有數字都在 0~n-1 的范圍內。數組中某些數字是重復的,但不知道有幾個數字重復了,也不知道每個數字重復了幾次。請找出數組中任意一個重復的數字。

示例 1:

輸入:
[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3

限制:

2 <= n <= 100000


解法一:排序

解決這個問題一個簡單辦法就是先把輸入的數組排序,從排序的數組中找出重復的數字是一件很容易的事情,只需從頭到尾掃描即可。

時間復雜度為O(nlogn),空間復雜度O(1)

class Solution { public:int findRepeatNumber(vector<int>& nums) {int n = nums.size();sort(nums.begin(),nums.end());for(int i = 1; i < n; i++){if(nums[i-1] == nums[i])return nums[i];}return -1;} };

解法二:哈希表

構造一個長度為n的哈希表,遍歷數組,每掃描到一個數字,都判斷其是否在哈希表中存在,若不存在,則加入;若存在,則為重復數字。

時間復雜度為O(nlogn),空間復雜度O(n)

代碼一:c++內置容器unordered_map實現(耗時較高)

class Solution { public:int findRepeatNumber(vector<int>& nums) {unordered_map<int,int>um;int k = 0;for(auto i : nums) {um[i]++;if(um[i] > 1) { k = i; break;}}return k;} };

代碼二:數組模擬哈希表(耗時低,因為數組效率高)

class Solution { public:int findRepeatNumber(vector<int>& nums) {int a[100005] = {0};int k = 0;for(auto i : nums) {a[i]++;if(a[i] > 1) { k = i; break;}}return k;} };

解法三:原地置換

現在讓我們重排這個數組。從頭到尾依次掃描這個數組中的每個數字。

當掃描到下標為i的數字時,首先比較這個數字(用m表示)是不是等于i。

如果是,則接著掃描下一個數字;如果不是,則再拿它和第m個數字進行比較。

如果它和第m個數字相等,就找到了一個重復的數字(該數字在下標為i和m的位置都出現了);如果它和第m個數字不相等,就把第i個數字和第m個數字交換,把m放到屬于它的位置。
接下來再重復這個比較、交換的過程,直到我們發現一個重復的數字。

以數組{2,3,1,0,2,5,3}為例來分析找到重復數字的步驟。數組的第0個數字(從0開始計數,和數組的下標保持一致)是2,與它的下標不相等,于是把它和下標為2的數字1交換。交換之后的數組是{1,3,2,0,2,5,3}。

此時第О個數字是1,仍然與它的下標不相等,繼續把它和下標為1的數字3交換,得到數組{3.1.2.0.2.5.3}。

接下來繼續交換第0個數字3和第3個數字0,得到數組{0.1.2.3.2.5.3}。此時第О個數字的數值為0,接著掃描下一個數字。

在接下來的幾個數字中,下標為1、2、3的3個數字分別為1、2、3,它們的下標和數值都分別相等,因此不需要執行任何操作。

接下來掃描到下標為4的數字2。由于它的數值與它的下標不相等,再比較它和下標為2的數字。

注意到此時數組中下標為2的數字也是2,也就是數字2在下標為2和下標為4的兩個位置都出現了,因此找到一個重復的數字。

時間復雜度為O(n),空間復雜度O(1)

class Solution { public:int findRepeatNumber(vector<int>& nums) {int i = 0, len = nums.size();while(i < len) {if(nums[i] == i) {i++;continue;}if(nums[i] != nums[nums[i]]) {swap(nums[i], nums[nums[i]]);} else {return nums[i];}}return -1;} };

?????——朝著一個目標不斷做精深練習,不斷犯錯,不斷挑戰自己的極限,這種努力給你帶來的收獲絕對超出你的想象

總結

以上是生活随笔為你收集整理的【三种解法实现】剑指 Offer 03. 数组中重复的数字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 337p日本欧洲亚洲大胆张筱雨 | 日韩免费在线观看视频 | 国产伦精品一区二区三区妓女下载 | 成年人黄国产 | 久久综合国产精品 | 狠狠躁夜夜躁人人爽视频 | 国模人体私拍xvideos | 欧美在线视频不卡 | 欧美日韩精品在线 | 精品久久久久久无码人妻 | 成人xxxx | 国产黄色在线 | 日韩精品五区 | 国产老熟女伦老熟妇露脸 | 久久久久久中文字幕 | 鲁鲁狠狠狠7777一区二区 | 欧美亚洲日本国产 | 四虎精品在永久在线观看 | www.xxx.国产| 全国最大色 | 理论片琪琪午夜电影 | 亚洲av无码不卡一区二区三区 | 91喷水| 天天玩天天操 | 国产最新精品视频 | 波多野结衣久久久久 | 免费黄网站在线 | 欧美成人高清 | 在线观看91视频 | 日韩欧美高清在线观看 | 制服丝袜先锋 | 中文字幕日韩有码 | 成人免费视频国产免费 | 亚洲成年人网站在线观看 | 亚洲精品美女视频 | 日韩高清影院 | 国产在线你懂得 | 亚洲精品电影网 | 亚洲婷婷网 | 国产一区福利 | 国产亲伦免费视频播放 | 国产黄a三级 | 日本在线看片 | 天天爽夜夜爽一区二区三区 | 日韩一级免费片 | 亚洲精品成人无码毛片 | 黄色片视频免费观看 | 中文字幕久久久久 | 亚洲一区二区三区四区在线观看 | 欧美一区二区成人 | 老外一级片 | 青娱乐精品视频 | 欧美国产一区二区三区 | 91亚洲网站 | 亚洲字幕av一区二区三区四区 | 五月天久久久 | 亚洲一区欧美激情 | 中国老头性行为xxxx | 91精品婷婷国产综合久久蝌蚪 | 黄色网址中文字幕 | 69天堂网 | 国产在成人精品线拍偷自揄拍 | 2022精品国偷自产免费观看 | 依依成人在线 | 亚洲欧美另类日本 | 欧美高跟鞋交xxxxxhd | 先锋资源中文字幕 | 四虎午夜影院 | 91丨九色丨海角社区 | 久久狠| 进去里片欧美 | 新婚之夜玷污岳丰满少妇在线观看 | 国产噜噜噜 | 伊人网在线视频 | 欧美特级视频 | 女优一区二区三区 | 国产一级免费视频 | 91丨porny丨中文 | 国产精品高潮呻吟AV无码 | 日本欧美国产一区二区三区 | 国产在线观看无码免费视频 | 日韩二三区 | sese在线视频| 激情网色 | 亚洲视频天堂 | 亚洲精品www久久久久久广东 | 潘金莲一级淫片aaaaa | 手机成人在线视频 | 黑人三级视频 | 国产伦精品一区二区三区免费视频 | 久久手机看片 | 中文字幕欧美色图 | 亚洲精品88 | 日韩经典一区二区三区 | 91麻豆精品视频 | 曰本三级日本三级日本三级 | 新婚之夜玷污岳丰满少妇在线观看 | 日本天堂免费a | 欧美一级片免费观看 |