【leetcode刷題】數組部分記錄(更新中)

簡單

1.面試題53 - II. 0~n-1中缺失的數字

在這裏插入圖片描述

  • 解題思路1:0到n-1範圍內有n個數組,創建一個升序的從0到n的新數組,遍歷原數組,如果某一個位置上的數和原數組不同,那麼返回新數組中的那個數。當遍歷完原數組後都沒有出現不同的數值,那麼就返回新數組的最後一個。
class Solution:
    def missingNumber(self, nums: List[int]) -> int:
        list1 = [i for i in range(len(nums)+1)]
        for i in range(len(nums)):
            if list1[i] != nums[i]:
                return list1[i]
        return list1[-1]             

在這裏插入圖片描述

  • 解題思路2:用二分查找法,分別設置i和j兩個指針,和中間位置m.將數組分爲兩部分,左邊部分是按照次序排列的,右邊部分是不按次序排列的,經過二分查找後,i最終會停在右邊序列的第一個位置。
class Solution:
    def missingNumber(self, nums: List[int]) -> int:
        i,j = 0,len(nums)-1
        while i <= j:
            m = (i + j) // 2
            if nums[m] == m:
                i = m + 1
            else:
                j = m - 1
                
        return i

在這裏插入圖片描述

1051. 高度檢查器

在這裏插入圖片描述

  • 解題思路1:將數組排序,比對兩個數組中不一樣元素的個數,這種方法非常的簡單粗暴
在這裏插入代碼片
  • 解題思路2:借鑑計數排序的思路,創建一個數組,數組中的每個元素都是這個元素的數組下標對應在原數組中的個數。參考這個
class Solution:
    def heightChecker(self, heights: List[int]) -> int:
        list1 = [0] * (max(heights)+1)
        for i in range(len(heights)):
            list1[heights[i]] += 1
        j = 0
        count = 0
        for i in range(len(list1)):
            while list1[i] > 0 and j < len(heights):
                if heights[j] != i:
                    count += 1
                list1[i] -= 1
                j += 1
                
        return count
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章