classSolution: defproductExceptSelf(self, nums): """ 完美解 :type nums: List[int] :rtype: List[int] """ left = 1 right = 1 len_nums = len(nums) output = [0]*len_nums #从左到右进行一次遍历,在output中对应位置记录该值左面的元素乘积 for i in range(0,len_nums): output[i] = left left = left*nums[i] #从右到左进行一次遍历,记录每个值右面元素的乘积,和output中已经进行存储的左面乘积相乘,得到各个位置最终的结果 for j in range(len_nums-1,-1,-1): output[j] *= right right *= nums[j] return output
2.缺失数字
给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
示例 1:
1 2
输入: [3,0,1] 输出: 2
示例 2:
1 2
输入: [9,6,4,2,3,5,7,0,1] 输出: 8
说明: 你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?
思路一:最常见的思路应该是先排序,然后顺序遍历,对不上则为缺失位置
1 2 3 4 5 6 7 8 9 10 11
classSolution: defmissingNumber(self, nums): """ :type nums: List[int] :rtype: int """ for key,value in emumerate(nums): if key!=value: return key else: return key+1
classSolution(object): defclimbStairs(self, n): """ :type n: int :rtype: int """ way = [0,1,2] for i in range(3,n+1): way.append(way[i-1]+way[i-2]) return way[n]