【随想录训练营】Day01|| 704.二分查找、27.移除元素、977.有序数组的平方

704. 二分查找 - 力扣(LeetCode)

27. 移除元素 - 力扣(LeetCode)

977. 有序数组的平方 - 力扣(LeetCode)

704.二分查找

二分法条件:

  1. 整型数组有序且无重复元素
  2. 找到循环不变量且目标值在循环不变量中

解法一(左闭右闭):

def search(self, nums: List[int], target: int) -> int:
    l, r = 0, len(nums)-1
    while(l<=r):
        m = (l+r)//2
        if nums[m] == target:
            return m
        elif nums[m] < target:
            l = m+1
        else:
            r = m-1
        return -1

解法二(左闭右开):

def search(self, nums: List[int], target: int) -> int:
    l, r = 0, len(nums)
    while(l<r):
        m = l+(r-l)//2
        if nums[m] > target:
            # (这里和左闭右闭是有区别的,不能用r= m+1,这里我们只指导nums[m]<target,
            #  不知道nums[m+1]是否还小于!!)
            r = m  
        elif nums[m] < target:
            l = m+1
        else:
            r = m
    return -1

 27.移除元素

使用快慢指针解决:快指针遍历所有元素;慢指针遍历不等于val的元素

class Solution(object):
    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        j = 0
        for i in range(len(nums)):
            if nums[i] != val:
                nums[j] = nums[i]
                j += 1
        return j

 977.有序数组的平方

思路:数组有序,那么两端的数字绝对值比较大,将逐个比较两端数字的平方,将大的那个添加到新的数组中,最后反转一下这个数组,就是将原数组平方后从小到大排列

def sortedSquares(self, nums):
    l, r = 0, len(nums)-1
    x = []
    while(l<=r):
        a = nums[l]*nums[l]
        b = nums[r]*nums[r]
        if a>b:
            x.append(a)
            l+=1
        else:
            r-=1
            x.append(b)
    return x[::-1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值