对角线遍历-LeetCode
对角线遍历 🎯 问题描述(来源于LeetCode) 描述: 给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。 说明: m == mat.length n == mat[i].length 1 <= m, n <= 104 1 <= m * n <= 104 -105 <= mat[i][j] <= 105 示例: 示例 1: 12输入:mat = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,4,7,5,3,6,8,9] 示例 2: 12输入:mat = [[1,2],[3,4]]输出:[1,2,3,4] 💻 解题思路 思路1:遍历 思路1:代码实现 1234567891011121314151617181920212223242526272829303132class Solution: def findDiagonalOrder(self, mat: List[List[int]]) -> List[int]...
排序数组-LeetCode
排序数组 🎯 问题描述(来源于LeetCode) 描述: 给你一个整数数组 nums,请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。 说明: 1 <= nums.length <= 5 * 104 -5 * 104 <= nums[i] <= 5 * 104 示例: 示例 1: 123输入:nums = [5,2,3,1]输出:[1,2,3,5]解释:数组排序后,某些数字的位置没有改变(例如,2 和 3),而其他数字的位置发生了改变(例如,1 和 5)。 示例 2: 123输入:nums = [5,1,1,2,0,0]输出:[0,0,1,1,2,5]解释:请注意,nums 的值不一定唯一。 💻 解题思路 思路1:希尔排序 思路1:代码实现 1234567891011121314class Solution: def sortArray(self, nums: List[int]) -> List[int]: size=l...
相对名次-LeetCode
相对名次 🎯 问题描述(来源于LeetCode) 描述: 给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都 互不相同 。 运动员将根据得分 决定名次 ,其中名次第 1 的运动员得分最高,名次第 2 的运动员得分第 2 高,依此类推。运动员的名次决定了他们的获奖情况: 名次第 1 的运动员获金牌 "Gold Medal" 。 名次第 2 的运动员获银牌 "Silver Medal" 。 名次第 3 的运动员获铜牌 "Bronze Medal" 。 从名次第 4 到第 n 的运动员,只能获得他们的名次编号(即,名次第 x 的运动员获得编号 "x")。 使用长度为 n 的数组 answer 返回获奖,其中 answer[i] 是第 i 位运动员的获奖情况。 说明: n == score.length 1 <= n <= 104 0 <= score[i] <= 106 score 中的所有值 互不相同 示例:...
加一-LeetCode
加一 🎯 问题描述(来源于LeetCode) 描述: 给定一个表示 大整数 的整数数组 digits,其中 digits[i] 是整数的第 i 位数字。这些数字按从左到右,从最高位到最低位排列。这个大整数不包含任何前导 0。 将大整数加 1,并返回结果的数字数组。 说明: 1 <= digits.length <= 100 0 <= digits[i] <= 9 digits 不包含任何前导 0。 示例: 示例 1: 12345输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。加 1 后得到 123 + 1 = 124。因此,结果应该是 [1,2,4]。 示例 2: 12345输入:digits = [9]输出:[1,0]解释:输入数组表示数字 9。加 1 得到了 9 + 1 = 10。因此,结果应该是 [1,0]。 💻 解题思路 思路1:反向遍历 思路1:代码实现 12345678910111213141516171819class Solution: def plusO...
各赛事的注册率-LeetCode
各赛事的注册率 🎯 问题描述(来源于LeetCode) 描述: 用户表: Users ±------------±--------+ | Column Name | Type | ±------------±--------+ | user_id | int | | user_name | varchar | ±------------±--------+ user_id 是该表的主键(具有唯一值的列)。 该表中的每行包括用户 ID 和用户名。 注册表: Register ±------------±--------+ | Column Name | Type | ±------------±--------+ | contest_id | int | | user_id | int | ±------------±--------+ (contest_id, user_id) 是该表的主键(具有唯一值的列的组合)。 该表中的每行包含用户的 ID 和他们注册的赛事。 编写解决方案统计出各赛事的用户注册百分率,保留两位...
寻找数组的中心下标-LeetCode
寻找数组的中心下标 🎯 问题描述(来源于LeetCode) 描述: 给你一个整数数组 nums ,请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。 如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。 说明: 1 <= nums.length <= 104 -1000 <= nums[i] <= 1000 示例: 示例 1: 123456输入:nums = [1, 7, 3, 6, 5, 6]输出:3解释:中心下标是 3 。左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,右侧数之和 sum = nums[4] + nums[5] = 5 + 6 = 11 ,二者相等。 示例 2: 1234输入:nums = [1, 2, 3]输出:-1解...
螺旋矩阵-LeetCode
螺旋矩阵 🎯 问题描述(来源于LeetCode) 描述: 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 说明: m == matrix.length n == matrix[i].length 1 <= m, n <= 10 -100 <= matrix[i][j] <= 100 示例: 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9,5,6,7] 💻 解题思路 思路1:四个方向顺序遍历 思路1:代码实现 1234567891011121314151617181920212223242526272829class Solution: def spiralOrder(self, matrix: List[List[int]]) ->...
旋转函数-LeetCode
旋转函数 🎯 问题描述(来源于LeetCode) 描述: 给定一个长度为 n 的整数数组 nums 。 假设 arrk 是数组 nums 顺时针旋转 k 个位置后的数组,我们定义 nums 的 旋转函数 F 为: F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * arrk[n - 1] 要求: 返回 F(0), F(1), ..., F(n-1)中的最大值 。 生成的测试用例让答案符合 32 位 整数。 说明: n == nums.length 1 <= n <= 105 -100 <= nums[i] <= 100 示例: 示例 1: 输入: nums = [4,3,2,6] 输出: 26 解释: F(0) = (0 * 4) + (1 * 3) + (2 * 2) + (3 * 6) = 0 + 3 + 4 + 18 = 25 F(1) = (0 * 6) + (1 * 4) + (2 * 3) + (3 * 2) = 0 + 4 + 6 + 6 = 16 F(2) = (...
轮转数组-LeetCode
轮转数组 🎯 问题描述(来源于LeetCode) 描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 要求: 1 Do not return anything, modify nums in-place instead 说明: 1 <= nums.length <= 105 -231 <= nums[i] <= 231 - 1 0 <= k <= 105 示例: 示例 1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4] 💻 解题思路 思路1:三次反转 思路1:代码实现 123456789101112131415class Solution: def rotate(self, nums: List[int], k: int) -> None: ...
区间加法II-LeetCode
区间加法II 🎯 问题描述(来源于LeetCode) 描述: 给你一个 m x n 的矩阵 M 和一个操作数组 op 。矩阵初始化时所有的单元格都为 0 。ops[i] = [ai, bi] 意味着当所有的 0 <= x < ai 和 0 <= y < bi 时, M[x][y] 应该加 1。 要求: 在 执行完所有操作后 ,计算并返回 矩阵中最大整数的个数 。 说明: 1 <= m, n <= 4 * 104 0 <= ops.length <= 104 ops[i].length == 2 1 <= ai <= m 1 <= bi <= n 示例: 示例 1: 输入: m = 3, n = 3,ops = [[2,2],[3,3]] 输出: 4 解释: M 中最大的整数是 2, 而且 M 中有4个值为2的元素。因此返回 4。 示例 2: 输入: m = 3, n = 3, ops = [[2,2],[3,3],[3,3],[3,3],[2,2],[3,3],[3,3],[3,3],[...















