LeetCode No.35 | StriveZs的博客

LeetCode No.35

LeetCode第三十五题

题目描述

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
示例 1:

输入: [1,3,5,6], 5
输出: 2
示例 2:

输入: [1,3,5,6], 2
输出: 1
示例 3:

输入: [1,3,5,6], 7
输出: 4
示例 4:

输入: [1,3,5,6], 0
输出: 0

思维导图

figure.1

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class Solution(object):
# 二分查找索引值
def binarySearch(self,nums,l,r,target):
if l < r:
mid = int((r+l)/2)
if nums[mid] < target:
return self.binarySearch(nums,mid+1,r,target)
elif nums[mid] > target:
return self.binarySearch(nums,l,mid-1,target)
else:
return mid
elif r == l:
if nums[r] == target:
return l
else:
return l
else:
return l

def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
核心思想:
使用二分法查找目标值,如果找到则返回索引值,如果没找到,则返回和它最接近数值的坐标(小于它的)
"""
index = self.binarySearch(nums,0,len(nums)-1,target)
if nums[index] == target:
return index
else:
if index >= int(0+len(nums)-1)/2:
if target > nums[len(nums)-1]:
index = len(nums)
else:
if nums[index] > target:
pass
else:
index += 1
return index

if __name__ == '__main__':
s = Solution()
print(s.searchInsert([1,3,5,7,9],10))
StriveZs wechat
Hobby lead  creation, technology change world.