python输入倒三角形_剑指offer系列python实现 日更(十七)

python输入倒三角形_剑指offer系列python实现 日更(十七)_第1张图片

放假准备!撒欢儿!

50.数组中重复的数字

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

思路:

创建一个长度为len(numbers)的数组num,初始化每个元素都为0。然后由于数组里的所有数字都在0到n-1的范围内,所以numbers里的每个数字i都可以用作索引,即num[i],用于存储i元素出现次数。

  • 如果num[i]为0,说明该元素目前出现1次,num[i]就增加1;
  • 如果num[i]不为0,说明该元素目前出现超过1次,可以将该元素返回。
class Solution:
    # 这里要特别注意~找到任意重复的一个值并赋值到duplication[0]
    # 函数返回True/False
    def duplicate(self, numbers, duplication):
        # write code here
        num = [0]*len(numbers)
        for i in numbers:
            if num[i] == 0:
                num[i] += 1
            else:
                duplication[0] = i
                return True
        return False

python输入倒三角形_剑指offer系列python实现 日更(十七)_第2张图片

51.构建乘积数组

给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)

思路:

这题比较巧妙的解法是参考剑指offer上面对乘积数组的构建图示:

python输入倒三角形_剑指offer系列python实现 日更(十七)_第3张图片
图片源自网络

可以将乘积数组B的组成看作由1分割成上下两部分三角型数组的每行元素乘积组成。

python输入倒三角形_剑指offer系列python实现 日更(十七)_第4张图片

用Up和Down储存上下两个三角形的元素乘积。

对于Down来说,存在Down[i-1] = A[i] * Down[i]关系,推导如下:

Down[0] = 1
Down[1] = A[0] * 1 = A[0] * Down[0]
Down[2] = A[1] * A[0] * 1 = A[1] * Down[1]
Down[3] = A[2] * A[1] * A[0] * 1 = A[2] * Down[2]
...
Down[i+1] = A[i] * Down[i]

对于Up来说,Up是个倒三角形,所以由下向上计算。存在

Up[0] = 1
Up[1] = A[-1] * 1 = A[-1] * Up[0]
Up[2] = A[-2] * A[-1] * 1 = A[-2] * Up[1]
Up[3] = A[-3] * A[-2] * A[-1] * 1 = A[-3] * Up[2]
...
Up[i+1] = A[-i-1] * Up[i]

这样B的每个元素B[i]就是Up的尾部元素Up[-i-1]乘以Down的头部元素Down[i]:

class Solution:
    def multiply(self, A):
        if not A:
            return []
        D = [1]
        U = [1]
        for i in range(len(A) - 1):
            D.append(D[i] * A[i])
            U.append(U[i] * A[-i-1])
        B = [D[i] * U[-i-1] for i in range(len(A))]
        return B

python输入倒三角形_剑指offer系列python实现 日更(十七)_第5张图片

写着写着准备早睡!今天就先更到这里!明天再来~

python输入倒三角形_剑指offer系列python实现 日更(十七)_第6张图片
宅就完事了

顺便附上之前的更新:

嘿我头发呢:剑指offer系列python实现 日更(十六)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第7张图片
嘿我头发呢:剑指offer系列python实现 日更(十五)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第8张图片
嘿我头发呢:剑指offer系列python实现 日更(十四)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第9张图片
嘿我头发呢:剑指offer系列python实现 日更(十三)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第10张图片
嘿我头发呢:剑指offer系列python实现 日更(十二)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第11张图片
嘿我头发呢:剑指offer系列python实现 日更(十一)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第12张图片
嘿我头发呢:剑指offer系列python实现 日更(十)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第13张图片
嘿我头发呢:剑指offer系列python实现 日更(九)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第14张图片
嘿我头发呢:剑指offer系列python实现 日更(八)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第15张图片
嘿我头发呢:剑指offer系列python实现 日更(七)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第16张图片
嘿我头发呢:剑指offer系列python实现 日更(六)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第17张图片
嘿我头发呢:剑指offer系列python实现 日更(五)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第18张图片
嘿我头发呢:剑指offer系列python实现 日更(四)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第19张图片
嘿我头发呢:剑指offer系列python实现 日更(三)​zhuanlan.zhihu.com
python输入倒三角形_剑指offer系列python实现 日更(十七)_第20张图片
嘿我头发呢:剑指offer系列python实现 日更(二)​zhuanlan.zhihu.com
1e8b60478527bd598c754009602c8712.png
嘿我头发呢:剑指offer系列python实现 日更(一)​zhuanlan.zhihu.com
960e62d42a5928aaf8e6170a32d1a5b6.png

你可能感兴趣的:(python输入倒三角形)