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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

图解面试题:找出数组中重复的数字?

發布時間:2025/3/11 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解面试题:找出数组中重复的数字? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天分享的題目來源于 LeetCode 上的劍指 Offer 系列 面試題03. 數組中重復的數字

題目鏈接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/

一、題目描述

找出數組中重復的數字。

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

示例 1:

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

限制:

2?<=?n?<=?100000

二、題目解析

注意題目描述:一個長度為 n 的數組 nums 里的所有數字都在 0~n-1 的 范圍內,這個 范圍 恰好與數組的下標可以一一對應。

所以我們可以執行某種操作,使索引與值一一對應即索引 0 的值為 0,索引 1 的值為 1。而一旦某個索引的值不只一個,則找到了重復的數字,也即發生了 哈希沖突

三、動畫描述

四、圖片描述

五、參考代碼

class?Solution?{public?int?findRepeatNumber(int[]?nums)?{//設索引初始值為?i?=?0int?i?=?0;//遍歷整個數組?nums?while(i?<?nums.length)?{//索引?i?的值為?i,無需執行交換操作,查看下一位if(nums[i]?==?i)?{i++;continue;}//索引?nums[i]?處的值也為?nums[i],即找到一組相同值,返回?nums[i]?即可if(nums[nums[i]]?==?nums[i])?return?nums[i];//執行交換操作,目的是為了使索引與值一一對應,即索引?0?的值為?0,索引?1?的值為?1int?tmp?=?nums[i];nums[i]?=?nums[tmp];nums[tmp]?=?tmp;}//如果遍歷整個數組都沒有找到相同的值,返回?-1return?-1;} }

六、復雜度分析

時間復雜度

遍歷數組需要 O(N) 時間。

注意參考代碼里面的關鍵字 continue,這表示在 while 的一次循環里面,只有這次循環將 索引(i)索引值(num[i]) 匹配到了,才會執行下一次循環。

在每一次的循環過程中,索引(i)索引值(num[i]) 匹配到后,在后續的循環過程中不會操作它們,所以雖然一開始的循環過程中,執行的交換操作較多,但在后續的循環過程中根本不需要再執行操作了。

根據均攤復雜度分析 ,總的時間復雜度為 ?O(N) ,N 為數組的長度。

空間復雜度

使用常數復雜度的額外空間,為 ?O(1)

往期推薦

多圖證明,Java到底是值傳遞還是引用傳遞?

2020-09-02

面試系列第2篇:回文字符串判斷的3種方法!

2020-08-24

面試系列第1篇:常見面試題和面試套路有哪些?

2020-08-21

關注下方二維碼,收獲更多干貨!

總結

以上是生活随笔為你收集整理的图解面试题:找出数组中重复的数字?的全部內容,希望文章能夠幫你解決所遇到的問題。

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