Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 题目给出的一个升序的数组和target目标值
- 要求target目标值在数组中进行查找,并返回其索引位置
- 如果target值在数组中不存在,则根据target值大小与数组中元素比较
- 使数组保持升序排列
二、思路分析:
我们拿到本题,有了前面的刷题基础了,实现本题的思路也比较清晰了(菜鸟方法):
- 首先判断target值在数组中,则返回nums数组的索引
- 当target值不在数组中,且target小于nums[0]时,则返回索引位置0
- 当target值不在数组中,且target大于nums[len(nums)-1],则返回索引位置len(nums)
- 使用for循环遍历数组,分别判断target在nums[i-1],nums[i]范围内,则返回索引位置
按照上述思路,我们用python进行实现代码如下:
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if target in nums:
return nums.index(target)
if target not in nums:
for i in range(1,len(nums)):
if target in range(nums[i-1],nums[i]):
return i
if target < nums[0]:
return 0
return len(nums)
看了大佬们的解题思路,二分法来求解。
二分法顾名思义就是不断缩小范围进行查找
- 当 target 大于nums[mid]时,则left指针移到mid+1位置
- 当 target 小于nums[mid]时,则right指针移到mid-1位置
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
left = 0
right = len(nums)-1
while left <=right:
mid = left + (right-left)/2
if nums[mid] < target:
left = mid +1
else:
right = mid-1
return left
三、总结:
我们使用暴力的方法进行解决后,提交代码记录:
使用二分法,提交记录为:
时间复杂度O(nlogn),空间复杂度为O(1)
以上是本期内容,欢迎大佬们点赞评论,下期见~~~