今天你leetcode了吗
leetcode日记
SpadeA_Iverxin
学无止境
展开
-
本系列说明
该系列是自己的Leetcode记录,用来激励自己坚持算法训练。其中刷题顺序参考CYC2018的github整理,在此表示感谢。Keep On!原创 2020-07-05 19:25:19 · 181 阅读 · 0 评论 -
20-今日三扣(剑指Offer)-变态青蛙跳台阶(dp)-矩形覆盖(dp)-二进制1的个数(移位).md
题目描述牛客网一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:无论怎么跳,对于n级台阶,青蛙最后一跳可能是1~n。假设青蛙对于m级阶梯的跳法有f(m)种。最后一跳是1,前面需要跳n-1级,所以此时为f(n-1)种可能。最后一条是2, 前面需要跳n-2级,此时为f(n-2)种可能。…最后一条是n,则青蛙一跃而上,此时只有1种跳法故最终为f(n-1)+f(n-2)+…f(1)+1使用动态规划,自底向上的构建思路,先计算f原创 2020-09-18 17:02:59 · 144 阅读 · 0 评论 -
19-今日一扣(LeetCode)-223-两个矩形重叠面积以及融合面积计算-M
223. 矩形面积LeetCode计算两个矩形融合之后的面积。(非原题描述)题解:本体思路不是最优的,利用了之前的两个矩形重叠判断的思路。该思路也可以用来求解矩形重叠部分的面积。融合后面积 = 两个矩形的总面积 - 重叠部分面积重叠部分的面积 = x方向投影的交集长度 * y方向投影的交集长度在投影交集计算时,即计算[a,b]与[c,d]的交集的长度。手下令[a,b]域永远是左侧起点那个集合。如果不是,进行交换。class Solution { public int comput原创 2020-09-03 11:02:45 · 1372 阅读 · 0 评论 -
1-剑指offer-1-剪绳子-DP-2-机器人的运动范围-DFS/BFS
1. 剪绳子题目描述Online给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)输出描述:输出答案。示例1输入8输出18题解分析:对于长度n的绳子,我们都进行不原创 2020-07-29 21:24:34 · 110 阅读 · 0 评论 -
18-今日一扣(LeetCode)-474-DP01背包-M
474. 一和零LeetCode在计算机界中,我们总是追求用有限的资源获取最大的收益。现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。注意:给定 0 和 1 的数量都不会超过 100。给定字符串数组的长度不会超过 600。示例 1:输入: Array = {"10", "0001&q原创 2020-07-29 21:21:53 · 117 阅读 · 0 评论 -
17-今日一扣(LeetCode)-416-DP01背包-M-494-DP01背包-M
416. 分割等和子集-M给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.题解思路:向01背包问题转化。本题虽然是分成两个大小相同的组。也就是说,原创 2020-07-28 21:11:28 · 177 阅读 · 0 评论 -
16-今日两扣(LeetCode)-62-DP-M-413-DP-M
62. 不同路径-MLeetCode一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向右 -> 向下2. 向右 -> 向下 -> 向右3. 向下 -> 向右 ->原创 2020-07-27 11:56:06 · 161 阅读 · 0 评论 -
14-今日三扣(LeetCode)-695-DFS-M-17-回溯-M-70-DP-E
695 岛屿最大面积-M-DFS两种写法题目:LeetCode给定一个包含了一些 0 和 1 的非空二维数组 grid 。一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0原创 2020-07-26 20:51:17 · 136 阅读 · 0 评论 -
15-今日扣(LeetCode)-64-DP-M
<h2 id="64最小路径和">64.最小路径和</h2><p><a href="https://leetcode-cn.com/problems/minimum-path-sum/">LeetC原创 2020-07-26 20:50:14 · 109 阅读 · 0 评论 -
13-今日再两扣(LeetCode)-445-贪心-E-435-贪心-M
455. 分发饼干-ELeetCode假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小朋友最多只能拥有一块饼干。示例 1:输入: [1,2,3], [原创 2020-07-25 16:38:12 · 113 阅读 · 0 评论 -
12-今日三扣(LeetCode)-347-桶排序(出现频率的排序)-M-451-桶排序-M -75-荷兰国旗问题-M
347. 前 K 个高频元素LeetCode给定一个非空的整数数组,返回其中出现频率前 k 高的元素。要求时间复杂度nlogn以下。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]题解两个关键点:使用HashMap来记录访问的次数使用PriorityQueue创建大顶堆,根据HashMap里面存储的次序对其进行排序,然后取前k个。或者创建大小为k的小顶堆时间复杂原创 2020-07-25 10:27:19 · 206 阅读 · 0 评论 -
11-今日一扣(LeetCode)-215-快速选择排序-M*/堆排序
215. 数组中的第K个最大元素LeetCode在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4题解调用库函数现实工作中最常用的方法:效率高于纯的快排。2ms左右 public int findKthLargest(int[] nums, int k) {原创 2020-07-24 16:10:03 · 209 阅读 · 0 评论 -
10-今日一扣(LeetCode)-198-E-动态规划-213-E-动态规划
文章目录198-打家劫舍-E题解213-打家劫舍2-M题解198-打家劫舍-ELeetcode是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金原创 2020-07-24 08:23:10 · 101 阅读 · 0 评论 -
9-今日一扣(leetcode)-227-广度优先搜索BFS/双向广度优先搜索*-M
题目:单词接龙Leetcode给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。解决方案每次只能改变一个字符,且等长。原创 2020-07-12 21:29:39 · 181 阅读 · 0 评论 -
8-今日一扣-leetcode-376-递归/动态规划/递归贪心/BFS-M*
完全平方数题目Leetcode给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.解决方案递归暴力破解法这个解法会超出时间限制。但是后续的算法是对该算法的一个提升。原理:numSquares(n)=min(numSquare(n−square)+1原创 2020-07-10 17:26:08 · 138 阅读 · 0 评论 -
7-今日一扣-1091-广度优先搜索BFS-M
二进制矩阵的最短路径在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1)。一条从左上角到右下角、长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, …, C_k 组成:相邻单元格 C_i 和 C_{i+1} 在八个方向之一上连通(此时,C_i 和 C_{i+1} 不同且共享边或角)C_1 位于 (0, 0)(即,值为 grid[0][0])C_k 位于 (N-1, N-1)(即,值为 grid[N-1][N-1])如果 C_i 位于 (r, c),则 g原创 2020-07-09 18:07:41 · 152 阅读 · 0 评论 -
6-今日一扣-95-分治递归-M*
生成二叉搜索树LeetCode给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。示例:输入: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原创 2020-07-08 20:20:58 · 124 阅读 · 0 评论 -
5-今日一扣-241-分治递归-M*
题目leetcode给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。示例 1:输入: “2-1-1”输出: [0, 2]解释:((2-1)-1) = 0(2-(1-1)) = 2示例 2:输入: “23-45”输出: [-34, -14, -10, -10, 10]解释:(2*(3-(45))) = -34((23)-(45)) = -14((2(3-4))5) =原创 2020-07-07 20:23:49 · 143 阅读 · 0 评论 -
4-今日一扣-34-二分法-M
查找目标范围LeetCode给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]解决方案class Solution {原创 2020-07-06 18:45:58 · 743 阅读 · 0 评论 -
3-今日两扣-278-二分法-E-153-二分法-M
278查找第一个错误版本题目leetcode你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API原创 2020-07-05 19:20:25 · 110 阅读 · 0 评论 -
2-今日两扣-744-e-二分法-540-m-二分法
744. 寻找比目标字母大的最小字母(E)题目leetcode给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。在比较时,字母是依序循环出现的。举个例子:如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’解答二分法class Solution { public char nextGreatestLetter(cha原创 2020-07-04 16:09:21 · 125 阅读 · 0 评论 -
1-今日一扣-69-easy-二分法、牛顿法-sqrt实现
实现开方leetcode实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。Example 1:Input: 4Output: 2Example 2:Input: 8Output: 2Explanation: The square root of 8 is 2.82842…, and sincethe decimal part is truncated, 2 is returned.原创 2020-07-03 15:49:39 · 179 阅读 · 0 评论