算法测试
给两个字符串S和T,判断T是否为S的重新排列后组成的单词:
将两个字符串打散排序,如果相同则拥有相同元素
s = "anagram" t = "nagaram" def ss(s,t): return sorted(list(s))==sorted(list(t)) y=ss(s,t) print(y)
给定一个m*n的二维列表,查找一个数是否存在。列表有下列特性:
每一行的列表从左到右已经排序好。
每一行第一个数比上一行最后一个数大。
[ [1,2,3,4], [22,23,24,25], [31,32,34,35] ]
二维坐标变为一维坐标:(x,y)=x*n(每行个数)+y
一维坐标变二维坐标:x = i//n ,y=i%n
使用二分法
def searchMatrix(matrix, target): m = len(matrix) # 求y if m == 0: return False n = len(matrix[0]) # 求x if n == 0: return False low = 0 high = m * n - 1 while low <= high: mid = (low + high) // 2 x, y = divmod(mid, n) if matrix[x][y] > target: high = mid - 1 elif matrix[x][y] < target: low = mid + 1 else: return True else: return False
给定一个列表和一个整数,设计算法找两个数的小标,使得两个数之和为给定的整数。保证肯定仅有一个结果。
例如:列表[1,2,5,4]与目标整数3,1+2=3,结果为(0,1)
def twoSum(num, target): dict = {} # 存值与索引 for i in range(len(num)): x = num[i] if target - x in dict: return dict[target - x], i dict[x] = i