<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在上一篇部落格中劍指Offer之面試題3: 陣列中重複的數位中,其實能發現這類題目的關鍵就是一邊遍歷陣列一邊查滿足條件的元素。
然後我們在部落格用最複雜的方式學會陣列(Python實現動態陣列)這篇部落格中介紹了陣列這一結構的本質,並自己動手實現了一個動態陣列。
今天我們介紹一下另一道來自《劍指Offer》的關於陣列的面試題——不修改陣列找出重複的數位。
題目二:不修改陣列找出重複的數位
給定一個長度為 n+1 的陣列裡的所有數位都在 0∼n 的範圍內,所以陣列中至少有一個數位是重複的。
請找出陣列中任意一個重複的數位,但不能修改輸入的陣列。
樣例:
給定長度為8的陣列 nums = [2, 3, 5, 4,3, 2, 6,7]
那麼輸出重複的數位2或者3
首先我們得關注到,題目要求是:不修改陣列,然後還是 返回任意一個重複的數位 。所以解題思路相比而言變少了:
1.雜湊表:跟上一題一樣,本題也可以建立一個雜湊表,如果原陣列的每個數位第一次出現,就把他放到雜湊表中去,即原陣列大小為m的數位應該放到雜湊表下標為m的位置上。空間複雜度是 $O(n)$ 。
2.二分法:那麼有沒有不用空間複雜度 $O(n)$ 的演演算法。假設沒有重複數,那麼1~n 之間,每個數都只能出現一次。而題目中,這個陣列至少有一個數位重複,即出現的次數大於1。
利用二分的思想:把 1~n 的數位從中間數位 m 開始分為兩部分,前一半為 1~ m,後面一半為 m+1 ~n,如果 1~m 中的數位在陣列中出現的次數大於 m,那麼這一半必定有重複的數位;
否則,那麼另一部分必定含有重複數位。接著我們,繼續對含有重複數位的區間一分為二,直到找到重複的數位。
def find_duplicated_num(nums): """hash_map""" hash_map = dict() for i, val in enumerate(nums): if val in hash_map: return val hash_map[val] = i return False
def reduce_inter(nums2, left, right): """ """ mid = (left + right) // 2 count = 0 length = len(nums2) for i in range(length): if (nums2[i] >= left) and (nums2[i] <= mid): count += 1 if count > mid - left + 1: return left, mid else: return mid+1, right def find_duplicated_num2(nums2): left, right = 1, len(nums2) - 1 while left != right: left, right = reduce_inter(nums2, left, right) return left
nums = [2, 3, 5, 4, 3, 2, 6, 7] # nums_n = [5, 4, 3, 2, 6, 7] print("思路一測試結果: ", find_duplicated_num(nums)) print("思路二測試結果: ", find_duplicated_num2(nums))
結果
思路一測試結果: 3
思路二測試結果: 3
其實,這種演演算法不能保證找出所有重複的數位,比如不能找出[2, 3, 5, 4, 3, 2, 6, 7]重複數位2。
以上就是不修改陣列找出重複的數位Python實現的詳細內容,更多關於python找出重複數位的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45