首页 > 编程语言 >代码随想录算法训练营第一天 | 数组 704.二分查找 27.移除元素

代码随想录算法训练营第一天 | 数组 704.二分查找 27.移除元素

时间:2024-04-04 12:55:34浏览次数:16  
标签:27 val nums 元素 随想录 typing 数组 移除 import

leetcode 704.二分查找

题目

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

解题思路

代码实现

本题对自己的难点

有大概的解题思路,但是代码实现有几个点写不出来
1、怎么取中间数的下标
2、数组长度为偶数时,中间数取哪个

其他问题

本地VSCode调试报错:
def search(self, nums: List[int], target: int) -> int:
NameError: name 'List' is not defined
解决办法:
python文件头引入typing模块 from typing import List
问题扩展:
(1)import typing后可以直接使用的数据类型
int、long、float、str、bool
(2)需要from typing import xxx的数据类型
List列表、Tuple元祖、Dict字典、Set集合 from typing import List,Tuple,Dict,Set
Iterable可迭代类型、Iterator迭代器 from typing import Iterable,Iterator
Generator生成器类型 from typing import Generator

leetcode 27.移除元素

题目

27.移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

解题思路

主要思想:
不要想着删除数组中元素值和val相等的元素,而是留下不等于val的元素

实现过程:
使用快慢双指针更新 新数组
快指针获取新数组的元素值
慢指针获取新数组的位置
当快指针获取的元素值≠val值时,就是新数组需要留下的值

实现代码

from typing import List
class Solution:
  def removeElement(self, nums: List[int], val: int) -> int:
    fast = 0
    slow = 0
    while fast < len(nums):
      if nums[fast] != val:
        nums[slow] = nums[fast]
        slow += 1
      fast += 1
    return slow

test = Solution()
nums = [1, 2, 3, 4, 3, 5]
val = 3
print(test.removeElement(nums, val))  

本题对自己的难点

1、解题思路
看到题目后首先想的是先删除指定的元素,然后把后面的元素向前移动
看完题解代码后,发现可以从另一个角度想问题,不是去删除元素,而是留下要的元素
2、不知道双指针具体怎么用
3、只看题解代码没看卡哥视频前,想不通为什么最后一行return慢指针返回的是新数组长度

标签:27,val,nums,元素,随想录,typing,数组,移除,import
From: https://www.cnblogs.com/wanglin2016/p/18113954

相关文章