NC98 螺旋矩阵
题目描述
给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。
示例1
输入--[[1,2,3],[4,5,6],[7,8,9]]
返回值--[1,2,3,6,9,8,7,4,5]
1 # 2 # 3 # @param matrix int整型二维数组 4 # @return int整型一维数组 5 # 6 class Solution: 7 def spiralOrder(self , matrix ): 8 # write code here 9 if len(matrix) == 0: 10 return list() 11 res = list() 12 row_begin, row_end = 0, len(matrix) - 1 13 column_begin, column_end = 0, len(matrix[0]) - 1 14 15 while row_begin <= row_end and column_begin <= column_end: 16 for column_index in range(column_begin, column_end+1): 17 res.append(matrix[row_begin][column_index]) 18 row_begin += 1 19 20 for row_index in range(row_begin, row_end+1): 21 res.append(matrix[row_index][column_end]) 22 column_end -= 1 23 24 if row_begin <= row_end: 25 for ano_column_index in range(column_end, column_begin-1, -1): 26 res.append(matrix[row_end][ano_column_index]) 27 row_end -= 1 28 29 if column_begin <= column_end: 30 for ano_row_index in range(row_end, row_begin-1, -1): 31 res.append(matrix[ano_row_index][column_begin]) 32 column_begin += 1 33 34 return res 35 36
NC132 环形链表的约瑟夫问题
题目描述
编号为1到n的n个人围成一圈。从编号为1的人开始报数1,依次下去,报到m的人离开,问最后留下的一个人,编号是多少?
示例1
输入--5,2
返回值--3
说明
开始5个人 1,2,3,4,5 ,从1开始报数,1->1,2->2编号为2的人离开
1,3,4,5,从3开始报数,3->1,4->2编号为4的人离开
1,3,5,从5开始报数,5->1,1->2编号为1的人离开
3,5,从3开始报数,3->1,5->2编号为5的人离开
最后留下人的编号是3
1 # 2 # 3 # @param n int整型 4 # @param m int整型 5 # @return int整型 6 # 7 class Solution: 8 def ysf(self , n , m ): 9 # write code here 10 res = [] 11 for i in range(n): 12 res.append(i+1) 13 i = 0 14 for j in range(n-1): 15 i = (i+m-1) % (n-j) 16 del res[i] 17 18 return res[0]
NC 83 子数组最大乘积
题目描述
给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。
示例1
输入--[-2.5,4,0,3,0.5,8,-1]
返回值--12.00000
1 # 2 # 3 # @param arr double浮点型一维数组 4 # @return double浮点型 5 # 6 class Solution: 7 def maxProduct(self , arr ): 8 # write code here 9 10 if not arr: 11 return 0 12 arr_len = len(arr) 13 14 imin = imax = res = arr[0] 15 for i in range(1, arr_len): 16 imax,imin = max(arr[i]*imax,arr[i]*imin,arr[i]),min(arr[i]*imax,arr[i]*imin,arr[i]) 17 res = max(res,imax) 18 19 return res
NC 130 分糖果问题
题目描述
一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:
1. 每个孩子不管得分多少,起码分到一个糖果。
2. 任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。(若相同则无此限制)
给定一个数组arr代表得分数组,请返回最少需要多少糖果。
[要求]
时间复杂度为On, 空间复杂度为O1
示例1
输入--[1,1,2]
返回值--4
说明--最优分配方案为1, 1,2
备注:
1 leq N leq 10^51≤N≤105
0 leq arr_i leq 10^50≤arri≤105
1 # 2 # pick candy 3 # @param arr int整型一维数组 the array 4 # @return int整型 5 # 6 class Solution: 7 def candy(self , arr ): 8 # write code here 9 ans = [1]*len(arr) 10 for i in range(1, len(arr)): 11 if arr[i] > arr[i-1]: 12 ans[i] = ans[i-1]+1 13 for i in range(len(arr)-1,0,-1): 14 if arr[i-1] > arr[i] and ans[i-1] <= ans[i]: 15 ans[i-1] = ans[i]+1 16 return sum(ans) 17 18 S = Solution() 19 while True: 20 try: 21 arr = list(map(int,input()[1:-1].split(','))) 22 #print(','.join(S.LIS(arr))) 23 res = S.candy(arr) 24 print('%s' % res) 25 except: 26 break