leetcode-27. 移除元素
背景:
- 题目要求:给nums【list】,val【int】。要求原地修改数组。
- 观察示例:删除所有val,最终return结果只关心count,nums前n个元素,顺序无关;即删除元素要么置0放末尾要么保持放最后
思路:
- 是否借助python函数方法:python的list常用方法有.append(x)/.insert(index,x)/.pop(index)/.remove(x)/.clear()/...但是.remove(x)是只能删除第一次出现的x(即存在多个时,只能删第一个)故remove可以组合while使用
- 要么覆盖:非val元素与val元素覆盖,但是如果处理相邻元素相同均为val和覆盖后,非val元素重复的情况?故放弃
- 要么置换:把val元素全部置换至末尾,l=0,r=len(nums)-1;第一种情况:nums[i]==val,nums[r]!=val;nums[i]==val,nums[r]==val则移位r=r-1,如果r-1位还是val,r继续移动;第二种情况:nums[l]!=val,不关心r,直接l往后移动
方法:
尝试实践思路1
尝试实践思路3,发现return的是数组的长度即len(nums)-count,但是存在特殊情况,就是如果数组只有一个元素val,也要删除
实践:
复盘:
数组问题,熟悉常用函数的方法,优先考虑调用方法实现
——————————————————————————————————————————
leetcode-27. 移除元素
背景:
- 题目要求:给nums【list】和target【int】求target所在index,不在nums中返回-1
- 示例观察:分存在/不存在两种情况
思路:
- 题目给出二分查找要求;
- 二分查找为:前提:排序数组,找中位数:nums【mid=(l+r)//2】,如果target比nums【mid】大,说明target在右区间【mid+1,r】,反之亦然通过此类方法缩小区间,直到找到target,如果发现区间不存在即l>r,return -1
方法:同思路
实践:
复盘:
熟悉二分思路,注意判断细节