题目
在排序数组中查找数字
一、二分查找
排序数组中查找数字,显而易见可以使用二分查找~~
在定位到这个数字以后,分别向左右两个方向辐射寻找与目标数字相同的数字,计数~
ok,何为二分查找?
知乎这位大哥讲的已经非常nice了~~
def find_num_in_arr_1(arr, k):
if not arr:
return 0
left, right = 0, len(arr) -1
while left <= right:
mid = (left + right) // 2
print(left, right, mid)
if arr[mid] > k:
right = mid - 1
elif arr[mid] < k:
left = mid + 1
else:
# 跳出循环
left = len(arr)+1
count = 0
mid_right, mid_left = mid,mid-1
while mid_right < len(arr) and arr[mid_right] == k:
count += 1
mid_right += 1
while mid_left >= 0 and arr[mid_left] == k:
count += 1
mid_left -= 1
return count
这种解法会用到指针,因此空间的效率并不是很高。
二、哈希表
使用一个哈希表来存储数组中的数字出现的次数,最后返回哈希表中的存储情况~~
def find_num_in_arr_2(arr, k):
if not arr:
return 0
d = {}
for num in arr:
if num not in d:
d[num] = 0
d[num] += 1
return d[k] if k in d else 0