1. 排序数组中查找元素的第一个和最后一个位置
给你一个按照非递减顺序排列的整数数组
nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 ,返回[-1, -1]。 你必须设计并实现时间复杂度为O(log n)的算法解决此问题。输入:nums = [5,7,7,8,8,10], target = 8 输出:[3,4]
1
2 ```
1 | class Solution: |
2. 寻找峰值
峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组
nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设nums[-1] = nums[n] = -∞。 你必须实现时间复杂度为O(log n)的算法来解决此问题。
输入:nums = [1,2,1,3,5,6,4] 输出:1 或 5 解释:你的函数可以返回索引 1,其峰值元素为 2; 或者返回索引 5, 其峰值元素为 6。
1
2
3
4
5
6
7
8
9
10
11
12
```python
class Solution:
def findPeakElement(self, nums: List[int]) -> int:
left,right=0,len(nums)-2
while left <= right:
mid = left + (right - left) // 2
if nums[mid]<nums[mid+1]:
left = mid+1
else:
right = mid-1
return left
3. 寻找旋转排序数组中的最小值
已知一个长度为
n的数组,预先按照升序排列,经由1到n次 旋转 后,得到输入数组。例如,原数组nums = [0,1,2,4,5,6,7]在变化后可能得到: 若旋转4次, 则可以得到[4,5,6,7,0,1,2]。 若旋转7次, 则可以得到[0,1,2,4,5,6,7]
1 | class Solution: |
4. 搜索旋转排序数组
整数数组
nums按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums在预先未知的某个下标k(0 <= k < nums.length)上进行了 向左旋转,使数组变为[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如,[0,1,2,4,5,6,7]下标3上向左旋转后可能变为[4,5,6,7,0,1,2]。 给你 旋转后 的数组nums和一个整数target,如果nums中存在这个目标值target,则返回它的下标,否则返回-1。
1 | class Solution: |