Keshawn_lu's Blog

Keshawn_lu's Blog

Become a better myself.

Leetcode 410. 分割数组的最大值
题目简介:给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。 注意:数组长度 n 满足以下条件: 1 ≤ n ≤ 1000 1 ≤ m ≤ min(50, n) 示例: 1234567891011输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5] 和 [10,8],因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。 思路:动态规划,dp[i][j]代表前i个数字分成j段,所有情况下,其各段和...
Leetcode 64. 最小路径和
题目简介:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 12345678输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。 思路:动态规划,dp[i][j]代表以grid[i][j]为右下角时的最小路径和。 首先初始化第一行和第一列。 由于每次只能向下或者向右移动一步,所以dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]。 最后返回dp[grid...
Leetcode 剑指 Offer 11. 旋转数组的最小数字
题目简介:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1: 12输入:[3,4,5,1,2]输出:1 示例 2: 12输入:[2,2,2,0,1]输出:0 思路:摸鱼做法:直接sort,返回数组最小值即可。 二分做法:设最小值在数组的下标为min,将每次的numbers[mid]与numbers[right]比较,存在三种情况: numbers[mid] < numbers[right],此时mi...
Leetcode 95. 不同的二叉搜索树 II
题目简介:给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。 示例: 1234567891011121314151617输入:3输出:[  [1,null,3,2],  [3,2,null,1],  [3,1,null,null,2],  [2,1,3],  [1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / ...
Leetcode 167. 两数之和 II - 输入有序数组
题目简介:给定一个已按照 升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 示例: 123输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。 思路:双指针,一共有三种情况: number...
Leetcode 312. 戳气球
题目简介:有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。 现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。 求所能获得硬币的最大数量。 说明: 你可以假设 nums[-1] = nums[n] = 1,但注意它们不是真实存在的所以并不能被戳破。 0 ≤ n ≤ 500, 0 ≤ nums[i] ≤...
Leetcode 97. 交错字符串
题目简介:给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。 示例 1: 12输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"输出: true 示例 2: 12输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"输出: false 思路:动态规划,dp[i][j]代表s1的前i个字符和s2的前j个字符能否构成s3的前i + j个字符。 ...
Leetcode 35. 搜索插入位置
题目简介:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 12输入: [1,3,5,6], 5输出: 2 示例 2: 12输入: [1,3,5,6], 2输出: 1 示例 3: 12输入: [1,3,5,6], 7输出: 4 示例 4: 12输入: [1,3,5,6], 0输出: 0 思路:直接二分查找即可。时间复杂度O(logn)。 tip: 找不到目标值时,最后返回left即可。 代码如下:12345678910111213141516171819202122cla...
Leetcode 785. 判断二分图
题目简介:给定一个无向图graph,当这个图为二分图时返回true。 如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。 graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph[i] 中不存在i,并且graph[i]中没有重复的值。 12345678910示例 1:输入: [[1,3], [0,2], [1,3], [0,2]]输出: true解释: 无向图如下:0----1...
Leetcode 96. 不同的二叉搜索树
题目简介:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种? 示例: 12345678910输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3 思路:动态规划,dp[i]代表i个节点能...
avatar
鸣蜩十九
Always
友链
CSDN BiliBili