Problem 1.Rabbit go home
Rabbit located at top left most,home is at bottom right most.Cells with width M,height N. in the cells snake ,one cell only habitat one snake.how many path possible? rabbit go right or down direction.
Problem 2. Stone weight
serveral stone weight is known,how to find a pair with given difference.eg.A-B=diff,(A,B) and (B,A) is same pair.
程序二很容易理解,约定题目二的代码给出O(n)复杂度的程序。
Behind,this is a demos .
Problem 1 Rabbit goes home
A & B
O(M * N) achieved
In [1]:
import numpy as np
snake_coord=((0,2),(3,3))means there are snakes at(0,2),(3,3)
In [7]:
def countPath(m,n,snake_coord): grid = getGrid(m,n,snake_coord) return uniquePathsWithsnakes(grid) def getGrid(m: int, n:int, snake_coord): grid = np.zeros((n,m)) for o in snake_coord: grid[o[0]][o[1]]=1 return grid def uniquePathsWithsnakes(snakeGrid): # if there is a snake at the start point, no path available if snakeGrid[0][0] == 1 or snakeGrid[-1][-1] == 1: return 0 m, n = len(snakeGrid), len(snakeGrid[0]) dp = [[0] * n for _ in range(m)] for i in range(m): for j in range(n): if i == 0 and j == 0: dp[i][j] = 1 elif snakeGrid[i][j] == 1: dp[i][j] = 0 else: dp[i][j] = (dp[i - 1][j] if i > 0 else 0) + (dp[i][j - 1] if j > 0 else 0) # print((i, j), ":", dp[i][j]) return dp[-1][-1]
C
In [5]:
countPath(4,3,[(0,1)]) #uncomment line 28,print((i, j), ":", dp[i][j])
(0, 0) : 1 (0, 1) : 0 (0, 2) : 0 (0, 3) : 0 (1, 0) : 1 (1, 1) : 1 (1, 2) : 1 (1, 3) : 1 (2, 0) : 1 (2, 1) : 2 (2, 2) : 3 (2, 3) : 4
Out[5]:
4
In [8]:
countPath(4,3,[(1,1),(1,2)])
Out[8]:
2
Problem 2 Find stone pairs
A
Write a function F that:
In [9]:
def findPairs(nums, d): #nums: list[int], k: int if d<0: return 0 saw = set() diff = set() for i in nums: if i-d in saw: diff.add((i,i-d)) if i+d in saw: diff.add((i, i+d)) saw.add(i) return diff
B
O(N) achieved
In [10]:
nums = [2,3,3,5,8,9,2] d = 1 tmp_lst = list(findPairs(nums, 1)) tmp_lst
Out[10]:
[(3, 2), (9, 8), (2, 3)]
C
In [23]:
a = [sorted(o)[0] for o in list(findPairs(nums, 1))] b = zip(a, tmp_lst) print([value for key,value in dict(b).items()])
[(2, 3), (9, 8)]
In [ ]:
贴了一堆代码,到底想问什么问题?
你好,我是有问必答小助手。为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,(3)问题相关图片。便于技术专家团更好地理解问题,并给出解决方案。
您可以点击问题下方的【编辑】,进行补充修改问题。