【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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章