day2 移除元素[双指针/栈的思维] 26.9.16
[数组] 27. 移除元素 / Easy / ⚠️
题目:

卡点:
-
我刚开始的时候没有反应过来这个题目的含义是让不等val的元素替代原有索引位置,所以想了好久没想到解决方法,后面想到了用pop方法删除元素
-
使用pop过程中我忘记了len返回的是list的长度,而索引是长度减一的
-
后面学习了题解发现这题可以用两种思路解决,不需要用到list.pop
-
栈思维,使用for循环遍历,用后进入的数值替代前面的数字
-
双指针,单独开个变量代替for循环进行遍历,另一个变量作为索引用于覆盖
-
核心套路:
- 栈思维:新元素覆盖旧元素
它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对的,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
- 双指针:两变量分别移动
双指针顾名思义,就是同时使用两个指针,在序列、链表结构上指向的是位置,在树、图结构中指向的是节点,通过或同向移动,或相向移动来维护、统计信息.
代码:
初始使用pop,while循环
▼Python复制代码class Solution(object): def removeElement(self, nums, val): """ :type nums: List[int] :type val: int :rtype: int """ #更改nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素 #考虑下for遍历 #for遍历我不知道怎么和索引结合,我尝试while循环 #使用range其实可以用range循环 #使用了pop方法 k=0 a=0 while a <= len(nums)-1: if nums[a] == val: nums.pop(a) else: k+=1 a+=1 return k
for循环,栈思维
▼Python复制代码class Solution(object): def removeElement(self, nums, val): """ :type nums: List[int] :type val: int :rtype: int """ #使用栈的思考,能大大简化 k = 0 for a in nums : if a != val: nums[k] = a k +=1 return k
While循环,双指针
▼Python复制代码class Solution(object): def removeElement(self, nums, val): """ :type nums: List[int] :type val: int :rtype: int """ #本次尝试双指针 a,b = 0,0 #本质上是用一个指针代替了for的功能 while a<len(nums): if nums[a] != val: nums[b]= nums[a] b+=1 a+=1 return b
复杂度:时间 O(n),空间 O(1)
二刷记录:
- [ ]
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
Day 12🧭行动:这次学习了匿名函数与变量定义🤓体会:这两种方法都能提高代码的可读性与可维护性,在特定情况都有很大作用🧑💻代码:#变量定义-指定类型注解abc: int = 915score1: float= 95.5hobby2: str = "python"result: bool = Truecba: None = Noneenglish: list[str] = ["A","B
3
day1 二分查找 26.9.15
2
day42今天开始做伙伴匹配系统,目前只完成了前端初始化和主页的导航栏和底部栏的编写。抢阿里云云服务器没抢到,明天定个闹钟抢。今天收到最右的笔试了,后天晚上7点。还有约了一个自研电话初试,明天下午2点。用友的全栈工程师笔试和ai面还没有做。感觉9月份笔试面试确实多一些,希望在笔试面试中成长,一次错记住不足的地方并提升。算法一题,java基础。
2
🚩JavaD151、写了三段代码,没有代码提示,只有阿里巴巴代码规范插件2、"写完"和"写好"代码差距太大3、Kimi制定了一份52周的学习计划,每天都有具体的代码计划,希望能坚持
1
今天学习了:①Python基础之——四大序列(list、tuple、dict、set)和两大流程控制(条件判断/模式匹配+for/while循环)②Python函数之——函数的定义、调用以及五大类参数设置和传递
2
