第 5 天
查找算法(中等)

这道题一开始看到递增数组我想使用二分查找,但是效率很低
然后看到使用线性查找可能更方便,因为矩阵中有两个特殊点,左下和右上。
左下的点比他大的点都在它右边,比他小的点都在它上面。
当target小于matrix点时,上移;当target大于matrix点时右移。
以下是代码
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
start = 0
if matrix==[] or matrix==[[]]:
return False
n = len(matrix)-1
m = len(matrix[0])-1
while start<=m and n>=0:
print (matrix[n][start])
if matrix[n][start] > target:
n -= 1
elif matrix[n][start] < target:
start += 1
else:
return True
return False

二分查找
class Solution:
def minArray(self, numbers: List[int]) -> int:
if len(numbers)==1:return numbers[0]
left = 0
right = len(numbers)
while left<right:
mid = (left+right)//2
if numbers[mid]-numbers[0]>0:
left = mid+1
elif numbers[mid]-numbers[0]<0:
if numbers[mid-1]>numbers[mid]:
return numbers[mid]
right = mid
else:
right -= 1
if numbers[right-1]>numbers[right]:
return numbers[right]
return numbers[0]

这一题一上来我想到的做法是哈希表法
此方法需要遍历两边string,第一遍存频数,第二遍找出频数为1的第一个元素
class Solution:
def firstUniqChar(self, s: str) -> str:
hashtable = []
for i in s:
hashtable[ord(i)-97]+=1
for j in s:
if hashtable[ord(j)-97] == 1:
return j
return ' '
下面是官方解答,依然也是遍历两遍string
class Solution:
def firstUniqChar(self, s: str) -> str:
frequency = collections.Counter(s)
for i, ch in enumerate(s):
if frequency[ch] == 1:
return ch
return ' '
179

被折叠的 条评论
为什么被折叠?



