代码随想录算法训练营day1|704.二分查找、27.移除元素、977.有序数组的平方

学习资料:https://programmercarl.com/数组理论基础.html

理解:
双指针可以同时获取一个数组的两个位置的值
二分查找:根据区间范围(左闭右闭、左闭右开)来判断左右指针比较方式

刷题记录:
704.二分查找(左闭右闭则<=,左右指针,middle=left+(right-left)//2, 因为考虑了等号情况所以下一步left=middle+1或right=middle-1)

点击查看代码
class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        left, right = 0, len(nums)-1
        while left <= right:
            middle=left + (right-left)//2
            if nums[middle]>target:
                right=middle-1
            elif nums[middle]<target:
                left = middle + 1
            else:
                return middle
        return -1
27.移除元素(只有一个数组空间;快慢指针;移除元素命令本质是把这个元素后一位移动到这个位置;soft寻找值不为val的位置,slow为准备保存值的位置;用while将soft遍历全数组)
点击查看代码
class Solution(object):
    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        soft=0
        slow=0
        size=len(nums)
        while soft < size:
            if nums[soft] != val:
                nums[slow] = nums[soft]
                slow += 1
            soft += 1
        return slow
977.有序数组的平方(题给数组空间+结果数组空间;左右指针+目标k指针;左闭右闭;left<=right;k从大到小使得结果数组是递增;把max(left值的平方,right值的平方)赋给k值,并移动相应指针和k指针)
点击查看代码
class Solution(object):
    def sortedSquares(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        left=0
        right = len(nums)-1
        k=len(nums)-1
        result=[0]*len(nums)
        while left <= right:
            if nums[left]**2 > nums[right]**2:
                result[k]=nums[left]**2
                left += 1
            else:
                result[k]=nums[right]**2
                right -= 1
            k -= 1
        return result
PS:国庆第二天,阴转小雨,感觉时间*0.5倍速
posted @ 2024-10-02 17:51  Tristan241001  阅读(18)  评论(1)    收藏  举报