【劍指offer】數字在排序陣列中出現的次數
阿新 • • 發佈:2018-12-11
想的是先二分查詢,找到之後再找周圍是否有相同
執行時間:27ms
佔用記憶體:5752k
# -*- coding:utf-8 -*- class Solution: def GetNumberOfK(self, data, k): # write code here if k not in data: return 0 lo = 0 hi = len(data) while (lo<=hi): mid = (lo+hi)//2 if data[mid]==k: res = mid break elif data[mid]<k: lo = mid+1 else: hi = mid-1 cnt = 0 while (mid>=0 and data[mid]==k): cnt += 1 mid -= 1 while (res+1<len(data) and data[res+1]==k): cnt += 1 res += 1 return cnt
-------------------------------------------
其他思路:
1、查詢num-0.5和num+0.5的位置,然後相減即可
2、二分的時候用兩個二分,一個查詢第一次出現的位置,即如果num[mid-1]==k,則hi=mid-1繼續查詢;第二個查詢最後一次出現的位置,即如果num[mid+1]==k,則lo=mid+1繼續查詢