题目: 程序接收三个参数,M,N和p,然后生成一个M * N的矩阵,然后每一个cell有p的概率是地雷。生成矩阵后,再计算出每一个cell周围地雷的数量.
思路: 创建(m+2)*(n+2)的矩阵,若value[i][j]
题目: 给一个m×n的矩阵,如果有一个元素为0,则把该元素对应的行与列所有元素全部变成0.
思路: 创建数组m和n,遍历整个矩阵凡是遇到0则m[i]=n[j]=0,再遍历一次矩阵,if(m[i]==0 or n[j]==0):matrix[i][j]=0
题目: 给一个n×n的数组,旋转90度.
思路: 一层一层从外到内的旋转,for layer in range(n//2):first=layer/ last=n-1-layer/ for i in range(first,last):offset=i-first/ top=matrix[first][i]…
题目: hello => olleh.
思路: s[i],s[n-1-i]=s[n-1-i],s[i]
题目: 给定一个数组,数组里有且只有一个最大数,判断这个最大数是否是其他所有数的两倍或更大。如果存在这个数,则返回其index,否则返回-1.
思路: 只要比较max≥2*second_max
题目: 给定非空数组,正整数,一位数 例:输入【1,2,3】->[1,2,4],输入【9,9,9】->[1,0,0,0].
思路: 从后往前遍历,若不是9则+1且break;否则为0继续遍历
题目: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。(原地转移).
思路: nums[:k],nums[k:]=nums[len(nums)-k:],nums[:len(nums)-k]
题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0](必须在原数组上操作,不能拷贝额外的数组).
思路: 每碰到一个0则记下count,下一个非零数时将其往前移count位,最后将数组最后count个数赋值为0
题目: 改变矩阵维度实现reshape;如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵.
思路: 创建两个空数组,一个将原数组变为一维,另一个负责将一维数组中的元素按行按列装进去
题目: 给定一个二进制数组, 计算其中最大连续1的个数。例[1,0,1,1,1,0,1,1]->3.
题目: 一个数组元素在 [1, n] 之间,其中一个数被替换为另一个数,找出重复的数和丢失的数.
思路: 创建0值数组,将原始数组以(值-1)为索引将应有数字的负值填入,若填进去时已有值,则*(-1)如[3,2,3,4]->[0,0,0,0]-[0,-2,3,-4],此时得到的新数组不仅排好序,而且lost为0位置应有值,dup为正数处应有值
题目: 给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数的最大值.你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度. 输入: [1,2,2,3,1,4,2]输出: 6
思路: 1.创建dic=defaultdict(list)记录每种数字有哪些索引 2.计算索引数最多的则为maxlen=max(len(value) for value in dic.values()) 3.求拥有maxlen的数字的索引列表尾数与头数之差的最小值
题目: 如果一个矩阵的每一方向由左上到右下的对角线上具有相同元素,那么这个矩阵是托普利茨矩阵。给定一个 M x N 的矩阵,当且仅当它是托普利茨矩阵时返回 True.
输入:
matrix =
[[1,2,3,4],
[5,1,2,3],
[9,5,1,2]]
输出: True
思路: 只看对角线,1. 固定col为0,row从 1 到 M - 1沿着对角线向右下比较(左下部分的处理) 2. if M > 1:固定row为0,col从 1 到 N - 1沿着对角线向右下比较(右上部分的处理)
240 / 378 / 287 / 667 / 565 / 769
持续更新