【代码随想录:数组】python3

数组

  • Day1 704. 二分查找,27. 移除元素
    • 704二分查找
      • 35 搜索插入位置
      • 34 在排序数组中查找元素的第一个和最后一个位置
    • 27 移除元素:双指针
    • 977.有序数组的平方
    • 209.长度最小的子数组:最小滑窗
    • 904.水果成篮:最大滑窗
    • 59.螺旋矩阵II

Day1 704. 二分查找,27. 移除元素

704二分查找

时间复杂度为 O ( l o g n ) O(log n) O(logn),空间复杂度为 O ( 1 ) O(1) O(1)
leetcode 704
1)遍历

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        for i, num in enumerate(nums):
            if target == num:
                return i
        return -1

时间O(n),空间O(1)
2)二分法
二分法详细讲解
题目关键词:有序数组

35 搜索插入位置

34中的def bound

34 在排序数组中查找元素的第一个和最后一个位置

def bound(nums:List[int], target:int) -> int:
    left, right = 0, len(nums) - 1
    while left <= right:
        mid = (left + right) // 2
        if nums[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    //找到目标值第一次出现的位置
    或者找到应该插入目标值的位置。
    return left   
class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        start = bound(nums, target)
        //首先检查 start 是否等于数组长度,然后检查 nums[start] 是否不等于目标值。
        这样的顺序可以确保在尝试访问 nums[start] 之前,数组不会越界。
        if start == len(nums) or nums[start] != target:
            return[-1, -1]
        else:
            end = bound(nums, target + 1) - 1
        return [start, end]

27 移除元素:双指针

要实现这个功能,我们可以使用双指针。使用一个慢指针 i i i 和一个快指针 j j j,在遍历数组的过程中,当遇到与给定值 v a l val val 不相等的元素时,将其移动到慢指针的位置。这样,所有不等于 v a l val val 的元素都会被移到数组的前部分。

def removeElement(nums: List[int], val: int) -> int:
    i = 0
    for j in range(len(nums)):
        if nums[j] != val:
            nums[i] = nums[j]
            i += 1
    return i

这段代码的时间复杂度为 O ( n ) O(n) O(n),其中 n 是数组 nums 的长度。空间复杂度为 O ( 1 ) O(1) O(1),因为我们仅使用了两个辅助变量(慢指针 i i i 和快指针 j j j)。

977.有序数组的平方

209.长度最小的子数组:最小滑窗

最大最小滑窗讲解

904.水果成篮:最大滑窗

59.螺旋矩阵II

你可能感兴趣的:(代码随想录,leetcode)