91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python不修改數組怎么找出重復的數字

發布時間:2022-05-20 16:52:13 來源:億速云 閱讀:153 作者:iii 欄目:開發技術

這篇“Python不修改數組怎么找出重復的數字”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Python不修改數組怎么找出重復的數字”文章吧。

    數組中重復的數字

    在上一篇博客中劍指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

    以上就是關于“Python不修改數組怎么找出重復的數字”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    报价| 遵义县| 重庆市| 云浮市| 浦城县| 昌邑市| 盐城市| 遵义县| 将乐县| 涞水县| 泸溪县| 广河县| 新化县| 丹寨县| 文安县| 商水县| 平果县| 个旧市| 布尔津县| 霍山县| 娄底市| 从化市| 中江县| 威信县| 前郭尔| 洛隆县| 拜城县| 托里县| 隆安县| 潜江市| 卢湾区| 晋中市| 汶川县| 商丘市| 磴口县| 元阳县| 桐柏县| 民勤县| 会昌县| 巴塘县| 鲜城|