题目描述:
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
思路注意: 二分查找正确的编写姿势:
• 查找区间永远是闭区间[low, high]
• 循环条件永远是:low<=high
• 返回值永远是mid,而不要是low、high
• low、high的更新永远是low=mid+1和high=mid-1
• 对于非确定性查找,使用前后探测法,来确定搜索区间 • 先处理命中情况,再处理在左右半部分查找的情况
代码:
class Solution(object):def search(self, nums, target):""":type nums: List[int]:type target: int:rtype: int"""low=0high=len(nums)-1while low<=high:# mid=(low+high)//2mid=low+(high-low)//2if nums[mid]==target:return midelif nums[mid]
给你一个数组 nums
和一个值 val
,你需要 原地移除所有数值等于 val
的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1)
额外空间并原地修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
注意的点:
## 方法1 : 单index记录的思想,因为要求的是移除后的数组的长度实际就是不等于val的量,遍历去赋值,统计即可。
# # 方法2 ,双指针的方式去做。一个在头,如果不为val时则向右走 +1,如果为val则等待后续交换到右侧);一个在后,如果为val则向左走,-1,不为val则等待后续交换到左侧);当左边的指针不在小于右边的指针时跳出来。由于要返回的元素是不等于val的长度,所以判读最后跳出循环的左边的指针所指向的值是否等于val ,如果不等于val,则说明长度要+1 (因为长度是index+1);否则返回index 。 注意判空
class Solution(object):def removeElement(self, nums, val):""":type nums: List[int]:type val: int:rtype: int"""## 方法1 : 单index记录的思想,因为要求的是移除后的数组的长度实际就是不等于val的量,遍历去赋值,统计即可。 # index=0# for i in range(len(nums)):# if val !=nums[i]:# nums[index]=nums[i]# index+=1# return index### 方法2 if nums is None or len(nums)==0: #对于数组判空不能少return 0l=0r=len(nums)-1while l