代码随想录算法训练营Day 1| 704. 二分查找、27. 移除元素

题目简介

704: 二分查找 https://leetcode.cn/problems/binary-search/

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值target ,写一个函数搜索nums中的 target,如果目标值存在返回下标,否则返回 -1。

27: 移除元素 https://leetcode.cn/problems/remove-element/

给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

初见思路

704: 二分查找,经典的算法了,重点是识别区间开闭性和寻找中间点时的溢出问题。

27:原地移除元素,使用双指针,可以选择直接遍历,遇到非target的元素和上一个与target值相等的元素互换位置;也可以两端到中间进行遍历。

按照个人思路给出以下解:

# 704
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        l,r = 0,len(nums)-1
        mid = None
        while l <= r:
            mid = l + (r - l) // 2
            if nums[mid] == target:
                return mid
            elif nums[mid] > target:
                r = mid - 1
            elif nums[mid] < target:
                l = mid + 1
        
        return -1
## 27
# 暴力解法
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        idx = cnt = 0
        for i in range(len(nums)):
            if nums[i] != val:
                nums[idx] = nums[i]
                idx += 1 
                cnt += 1
                
        return cnt

# 一种更适合双指针逻辑的解法
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        if not nums or len(nums) == 0:
            return 0
        l,r = 0,len(nums)-1
        while l < r:
            while (l<r) and nums[l] != val:
                l += 1
            while (l<r) and nums[r] == val:
                r -= 1
            nums[r],nums[l] = nums[l],nums[r]
        
        return l if nums[l] == val else l + 1
# 对于数组,不要只想顺序遍历,聚合/分散都要考虑,遍历的方式不唯一

复盘思路

https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html
https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html#%E6%80%9D%E8%B7%AF

重点难点

见原文复盘思路

今日收获

  1. 数组基本知识
  2. 二分查找和双指针的应用
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容