算法测试

给两个字符串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

  

 

posted @ 2018-05-06 14:13  瓜田月夜  阅读(227)  评论(0编辑  收藏  举报