算法测试
给两个字符串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

浙公网安备 33010602011771号