问题描述 给定一个包含多个信封的数组,其中第 i 个信封的尺寸为 widths[i] = (w_i, h_i),表示宽度和高度。当一个信封的宽度和高度都比另一个信封大的时候,我们称这个信封可以完全覆盖另一个信封。我们需要找到可以完全覆盖其他所有信封的最大信封。 如果不存在这样的信封,则返回 -1。 解法一 解题思路: 我们需要找到最大的信封,因此可以考虑对信封的尺寸进行排序,然后使用动态规划的方法
问题描述 给定一个整数数组 nums,找出其中没有出现在前两个最大元素中的第三大的数。如果不存在第三大的数,返回数组中的最大值。 示例 输入: [2, 2, 3, 1] 输出: 1 解释: 第一大的数是 3,第二大的数是 2,第三大的数是 1。 输入: [2, 2, 2, 3, 1] 输出: 3 解释: 最大的数是 3,不存在第二大和第三大的数。 解法一 解题思路: 为了找到第三大的数,我们可以先
问题描述 问题背景 LeetCode上编号为568的问题是关于如何最大化员工的假期天数。这个问题是一个典型的动态规划问题,需要根据员工的工作表现和假期安排来计算他们可以获得的最大假期天数。 问题陈述 给定一个整数数组days,其中days[i]表示第i个员工在第i天到第i+days[i]天之间的假期天数。返回能休假的天数最多的员工的假期天数。 输入输出格式 输入:一个整数数组days。 输出:一
问题描述 给定一个数组 nums,找出并返回该数组中非递减顺序的最小子序列,该子序列至少包含一个元素。 解法一 解题思路: 我们需要找到一个最小的子序列,使得这个子序列是非递减的。我们可以通过维护一个单调递增的栈来实现这个目标。 首先,我们初始化一个空栈 stack 和一个空数组 result。 遍历数组 nums 中的每个元素 num。 对于每个元素 num,我们执行以下操作: 弹出 sta
问题描述 在一个二维平面上,有 n 行石头排成一行,每行有 m 个石头。每个石头可以是红色、绿色或蓝色。 目标是找到最多可以移除的石头数量,使得没有两块石头在同一行或同一列。 示例 1: 输入: stones = [ [0,0,1], [0,1,0], [1,0,0] ] 输出: 3 解释: 移除 (0,0),(0,1),(1,0),(2,2) 这三块石头,剩下的没有两块石头在同一行或同一列。每行
问题描述 给定一个字符串 s,需要去除重复的字母,只保留第一次出现的字母,返回去除重复字母后的最小可能字符串。 解法一 解题思路: 为了解决这个问题,我们可以采用贪心算法和栈(Stack)数据结构。首先,我们记录每个字符出现的次数,然后遍历字符串,对于每个字符,如果它在栈中已经存在,则跳过;如果不存在,则将其压入栈中,并更新字符出现的次数。当字符出现次数变为0时,从栈中移除。这样,我们可以得到一个
问题描述 销售员表: 列名 类型 描述 sale_id int 销售员的唯一标识符 name varchar 销售员的名字 合同表: 列名 类型 描述 contract_id int 合同的唯一标识符 sale_id int 销售该合同的销售员(外键) customer varchar 客户的名字 contract_type varchar 合同类
问题描述 给定一个整数 n,求出从 1 到 n 的不同二叉搜索树(BST)的数量。 示例 示例 1: 输入: n = 3 输出: 5 解释: 给定 n = 3, 有五种不同的 BSTs: 1 3 3 2 1 \ / / / \ / 3 2 1 1 3 2 3 / /
问题描述 给定一个二叉树的根节点 root,返回所有从根节点到叶子节点的路径。 示例: 输入: root = [1,2,3,null,5] 1 / \ 2 3 \ 5 输出: ["1->2->5", "1->3"] 解题思路: 我们可以采用深度优先搜索(DFS)的方
问题描述 找到所有唯一的键盘行中的字母键字符。 键盘有6行,字母键字符如下: "QWERTYUIOP", "ASDFGHJKL", "ZXCVBNM"。 给定一个字符串,返回其包含的所有唯一键盘行中的字母键字符。 示例 输入: "Hello, World!" 输出: ["Hello", "
3Sum Closest 问题描述: 给定一个包括 n 个整数的数组 nums 和一个目标值 target,请你找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组内没有重复的整数。 示例: 输入: nums = [-1,2,1,-4], target = 1 输出: 2 解释: 与 target 最接近的和是 2。(-1 + 2 + 1 = 2)。 解法
问题描述 一个机器人位于一个 m x n 网格的左上角,它只能向下或向右移动。机器人试图到达网格的右下角。问有多少条不同的路径? 输入 一个二维数组 grid,其中 grid[i][j] 表示第 i 行第 j 列的障碍物数量。 输出 返回一个整数,表示从左上角到右下角的不同路径数量。 解法一 解题思路: 动态规划是解决这个问题的关键。我们可以定义一个二维数组 dp,其中 dp[i][j] 表示到达
问题描述 给定一个 n x n 的整数矩阵 board 表示一个棋盘。我们用黑白棋子来表示这个棋盘,其中 0 代表一个黑棋,1 代表一个白棋。棋盘的行数 n 为奇数,且 n x n 的棋盘有 n^2 个格子,其中一半黑棋,一半白棋,即 n^2 / 2 个黑棋和 n^2 / 2 个白棋。 任务是将棋盘转换为按行和列黑白交替出现的棋盘。返回最少需要翻转的格子数。 示例 1: 输入: board = [
Dota2 Senate 在Dota2游戏中,有两个阵营:Radiant和Dire。 游戏开始时,每个参议员都有一个健康值。 两个阵营的参议员轮流进行辩论。在每一轮中,失去所有健康值的参议员将无法参加后续的辩论。 给定两个整数数组senators,其中senators[i]表示第i个参议员的健康值,第一个元素是Radiant阵营的参议员的健康值,第二个元素是Dire阵营的参议员的健康值。 每一轮中
问题描述 给定一个头结点为 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:head = [1,2,3,4,5] 输出:[3,4,5] 示例 2: 输入:head = [1,2,3,4] 输出:[2,3,4] 解法一 解题思路: 使用快慢指针法。慢指针每次移动一步,快指针每次移动两步,当快指针到达链表末尾时,慢指针即为链表的中间节点。
题目描述 给定一个正整数 n,生成一个 n × n 的螺旋矩阵 II。 输入 一个整数 n。 输出 一个 n × n 的二维数组,表示螺旋矩阵。 示例 输入:n = 3 输出:[[1,2,3], [8,9,4], [7,6,5]] 解法一 解题思路: 我们可以使用四个指针来模拟螺旋矩阵的生成过程。从左上角开始,向右填充数字,然后向下,向右,向上,最后向左填充数字,直到所有位置都被填充。 /* *
问题描述 给定一个字符串S,检查是否能重新排列字符串,使得字符串的每个子串都是长度为K的重复子串构成。 示例 1: 输入: S = "aab", K = 3 输出: true 因为字符串S可以重新排列为"aaabb",它是由"aaa"重复或"bbb"重复构成的字符串。 示例 2: 输入: S = "aaa&q
问题描述 给定一个二叉树,返回它的前序遍历。 示例: 输入: [1,null,2,3] 1 \ null / 2 / 3 输出: [1,2,3] 解释: 从树的根节点开始,先访问根节点,然后访问左子树,最后访问右子树。 解法一 解题思路: 使用递归的方法进行前序遍历。对于每一个节点,先访问节点本身,然后递归访问左子树,最后递归访问右子树。 /*
问题描述 给定一个整数数组 A,其中 A[i] 表示第 i 个玩家持有的分数。计算所有可能的游戏结果的得分。 输入 A: 一个整数数组,表示每个玩家的分数。 输出 返回一个整数,表示所有可能的游戏结果的得分。 示例 示例 1: 输入: [1,2,3] 输出: 6 解释: 可能的游戏结果有 (1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2) 和 (3,2,1)。
问题描述 在一个由整数数组和常数数组组成的 M x N 矩阵中,找出一个大小为 K 的子矩阵,使得该子矩阵的元素之和等于 target。如果找到了这样大小的子矩阵,请返回 true,否则返回 false。 解法一 解题思路: 找到所有可能的子矩阵,计算它们的和,检查是否等于 target。 /* * @lc app=leetcode.cn id=840 lang=javascript * *
问题描述 给定一个正整数 n,找到其中最大的二进制位上的间隙长度。二进制位上的间隙是指在二进制表示中,两个 1 之间的 0 的数量。 示例 1: 输入: n = 22 输出: 2 解释: 22 的二进制是 10110。 在 22 的二进制表示中,有四个间隙 3, 1, 1, 和 2。 最大间隙是 2。 示例 2: 输入: n = 5 输出: 2 解释: 5 的二进制是 101。 在 5 的二进制表
问题描述 给定两个没有重复元素的数组 nums1 和 nums2 其中 nums1 是 nums2 的子集。找出 nums1 中所有元素在 nums2 中的下一个比其大的元素。结果应该按照 nums1 中的顺序排列。 注意: 所有元素是 32 位整数。 nums1 和 nums2 中至少有一个元素。 nums1 中最多包含 1000 个元素。 nums2 中最多包含 2000 个元素。 此题为求
问题描述 在LeetCode上,编号为514的问题是“自由之路”。这个问题要求我们找出在一个矩阵中从左上角到右下角的最短路径长度,只能向下或向右移动。 解法一 解题思路: 这个问题可以通过动态规划来解决。我们可以使用一个二维数组dp来存储到达每个点的最短路径长度。dp[i][j]表示到达点(i, j)的最短路径长度。状态转移方程为: dp[i][j] = min(dp[i-1][j], dp[i]
问题描述 给定一个二维二进制矩阵表示的屏幕,当旋转屏幕时,从左下角开始,在顺时针旋转k个90度。 示例 1: 输入: matrix = [[1,2,3],[4,5,6],[7,8,9]], k = 1 输出: [[7,4,1],[8,5,2],[9,6,3]] 示例 2: 输入: matrix = [[5,1,9],[11,18,13],[19,6,7]], k = 4 输出: [[5,1,9],
问题描述 给定一个表示一个UTF-8字符串的整数数组,返回它作为UTF-8编码时所表示的字符串。 注意: 输入是一个长度为n的整数数组,数组中的每个元素是字符串中的一个字符的UTF-8编码。 输出是构造的字符串。 如果数组中的一个值大于255,则假设它是单个UTF-8的字符。 输入数组中至少有一个元素。 元素值范围为0 <= 数组中的元素值 <= 4294967295。 示例 示例
问题描述 给定一个 n × n 的二维矩阵表示一个屏幕。"screen[i][j]" 表示位于第 i 行第 j 柱的像素的颜色值,颜色值的范围是 32 位无符号整数。 现在,想要将这个屏幕绕左上角按顺时针方向旋转 90 度,实现旋转后的新屏幕的矩阵。 注意: 必须原地修改输入的矩阵,以避免占用额外的空间。 旋转后,矩阵的右列成为最左列,最底行变成最顶行,以此类推。 示例 1
问题描述 给定一个整数数组 nums,你需要找出数组中有多少个非递减的子序列。 一个子序列是指可以通过删除一些元素(也可能不删除)而形成的序列,且不改变剩余元素的顺序。 示例 示例 1: 输入: nums = [4,2,3] 输出: 3 解释: 非递减子序列: [4], [2], [3], [4,2], [4,3], [2,3], [4,2,3] 因此总共有 7 个非递减子序列。 示例 2:
问题描述 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 示例 示例 1: 输入: s = "()" 输出: true 示例 2: 输入: s = "()[]{}" 输出: true 示例 3: 输入: s = &q
问题描述 找到数组中的第k个最大的元素。 **注意:**你需要找到的是数组排序后的第k个最大的元素,而不是第k个不同的元素。 示例: 假设数组 nums = [3,2,1,5,6,4] 和 k = 2,返回第2个最大的元素 5。 假设数组 nums = [3,2,3,1,2,4,5,5,6] 和 k = 4,返回第4个最大的元素 4。 解法一 解题思路: 使用快速选择算法(QuickSelect)
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号