
leetcode解题
做最好
学习的痛苦是暂时的,未学到的痛苦是终生的
展开
-
【快排分区算法,大顶堆】215. 数组中的第K个最大元素
题目:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例:思想:优先队列的思路是很朴素的。因为第 K 大元素,其实就是整个数组排序以后后半部分最小的那个元素。因此,我们可以维护一个有 K 个元素的最小堆:1、如果当前堆不满,直接添加;2、堆满的时候,如果新读到的数小于等于堆顶,肯定不是我们要找的元素,只有新都到的数大于堆顶的时候,才将堆顶拿出,然后放入新读到的数,进而让堆自己去调整内部结构。方法二: 利用快原创 2020-06-30 00:05:38 · 3466 阅读 · 0 评论 -
【原地算法】41. 缺失的第一个正数
问题:给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。例子:思路1. 我们将数组中所有小于等于 00 的数修改为 N+1N+1;2.我们遍历数组中的每一个数 xx,它可能已经被打了标记,因此原本对应的数为 |x|,其中 ∣∣ 为绝对值符号。如果 ∣x∣∈[1,N],那么我们给数组中的第 |x| - 1 个位置的数添加一个负号。注意如果它已经有负号,不需要重复添加;3.在遍历完成之后,如果数组中的每一个数都是负数,那么答案是 N+1,否则答案是第一个正数的位置加 11。原创 2020-06-27 22:55:40 · 196 阅读 · 0 评论 -
这一整套题下来,还怕面试?
一整套题下来,还怕面试?上链接:https://www.educative.io/courses/grokking-the-coding-interview?aff=K7qB我自己也补充了一些比较重要的模式和经典算法,自行按类型找题,后期会再更新下面我们就来看看的分类及每个类型的经典题目:1. Introduction 大概就是说这是帮助你进入顶级公司的一套课程,学习之前, 需要具...原创 2020-04-28 23:16:13 · 509 阅读 · 0 评论 -
【位运算,异或】“只出现一次的数字” 的一类问题解决方法
问题的题目全部来自leetcode,题号已给出异或的性质两个数字异或的结果a^b是将 a 和 b 的二进制每一位进行运算,得出的数字。 运算的逻辑是如果同一位的数字相同则为 0,不同则为 1异或的规律1.任何数和本身异或则为02.任何数和 0 异或是本身3.异或满足交换律。 即 a ^ b ^ c ,等价于 a ^ c ^ b注意交换律136. 只出现一次的数字cla...原创 2020-04-28 13:12:59 · 322 阅读 · 0 评论 -
【二分搜索】33. 搜索旋转排序数组
思路: 二分搜索如果 [l, mid - 1]是有序数组,且target 的大小满足 ( nums[l], nums[right] )则我们应该将搜索范围缩小至 [l, mid - 1],否则在 [mid + 1, r] 中寻找。如果 [mid, r] 是有序数组,且 target 的大小满足 ( nums[mid+1],nums[r] ),则我们应该将搜索范围缩小至 [mid + ...原创 2020-04-27 13:24:27 · 109 阅读 · 0 评论 -
[递归,模拟]55. 跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。方法一:递归class Solution { public boolean canJump(int[] nums) { return helper(nums,nums.length - 1); } private bo...原创 2020-04-17 13:01:00 · 266 阅读 · 0 评论 -
【API】151. 翻转字符串里的单词
问题描述给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格, 但是反转后的字符不能包括。示例 3:输入: "a good exampl...原创 2020-04-10 12:27:31 · 126 阅读 · 0 评论 -
【dfs,回溯】22. 括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。输入:n = 3输出:[ "((()))", "(()())", "(())()", "()(())", "()()()" ]非回溯法:放到参数中,每次新建字符串import org.w3c.dom.html.HTMLHeadElement;import ja...原创 2020-04-09 13:00:21 · 192 阅读 · 0 评论 -
【栈】1111. 有效括号的嵌套深度
思路:维护一个栈 s,从左至右遍历括号字符串中的每一个字符:如果当前字符是(,就把 ( 压入栈中,此时这个 (的嵌套深度为栈的高度;如果当前字符是),此时这个) 的嵌套深度为栈的高度,随后再从栈中弹出一个(。下面给出了括号序列 (()(())()) 在每一个字符处的嵌套深度:括号序列 ( ( ) ( ( ) ) ( ) )下标编号 0 1 2 3 4 5 6 7 8 9嵌套...原创 2020-04-01 12:53:18 · 166 阅读 · 0 评论 -
【基本排序重要思想】912. 排序数组
问题描述: 给你一个整数数组nums,将该数组升序排列。使用API就没多大的意义了。方法一: 快速排序的实现注意: 快速排序的边界情况还是比较烦人的,注意分情况,而且最后交换的时候一定是和right这个位置交换。import java.util.Arrays;class Solution { public int[] sortArray(int[] nums) { ...原创 2020-03-31 13:10:30 · 157 阅读 · 0 评论 -
【bfs,动态规划,Dijkstra】1162. 地图分析
你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用0和1 标记好了。其中0代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。我们这里说的距离是『曼哈顿距离』( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个区域之间的距离是|x0 - x1| + ...原创 2020-03-29 13:07:26 · 193 阅读 · 0 评论 -
【Trie】820. 单词的压缩编码
方法一:存储后缀思路如果单词X 是 Y的后缀,那么单词 X 就不需要考虑了,因为编码 Y 的时候就同时将 X编码了。例如,如果 words 中同时有 "me"和 "time",我们就可以在不改变答案的情况下不考虑 "me"。如果单词 Y不在任何别的单词X 的后缀中出现,那么 Y 一定是编码字符串的一部分。因此,目标就是保留所有不是其他单词后缀的单词,最后的结果就是这些单词长度加一的总和,...原创 2020-03-28 13:06:24 · 126 阅读 · 0 评论 -
【简单逻辑题】892. 三维形体的表面积
在N * N的网格上,我们放置一些 1 * 1 * 1 的立方体。每个值 v = grid[i][j] 表示 v个正方体叠放在对应单元格(i, j)上。请你返回最终形体的表面积。**思路:**计算每个位置的表面积,然后相加。其中计算每个位置的面积为 grid[i][j] - inner - outer,inner的意思是内部重叠面积,计算公式为 2 * (n - 1) ,outer代表与外...原创 2020-03-25 12:32:06 · 192 阅读 · 0 评论 -
[dp/贪心]435. 无重叠区间-----经典问题
无重叠区间是一类十分经典的问题,很多问题的模型就是基于这一就无重叠区间问题的。首先,一个很直接的思路就是这类题目和LIS(最长上升子序列问题)很像。所以考虑使用动态规划来解这道题import java.util.Arrays;import java.util.Comparator;class Solution { public int eraseOverlapInterval...原创 2020-03-24 19:24:20 · 177 阅读 · 0 评论 -
【dp】Leetcode面试题 17.16. 按摩师
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。暴力法:对于每个预约都有可选和可不选的两种情况记忆型递归:暴力法的问题在于有很多重复的子问题,可以使用记忆型递归的方式大大提高效率动态规划:dp数组的含义:dp[x]代表在[0…...原创 2020-03-24 18:23:18 · 189 阅读 · 0 评论 -
[dp]Leetcode.376.摆动序列
状态的定义:dp[i] 代表以下标为i结尾的最大摆动序列因为这里涉及到正负还有0所以使用up[i] 存的是目前为止最长的以第 i 个元素结尾的上升摆动序列的长度。类似的, down[i] 记录的是目前为止最长的以第 i 个元素结尾的下降摆动序列的长度。我们每当找到将第 i 个元素作为上升摆动序列的尾部的时候就更新 up[i] 。现在我们考虑如何更新 up[i] ,我们需要考虑前面所有的降...原创 2020-03-22 18:35:01 · 159 阅读 · 0 评论 -
leetcode 945 使数组唯一的最小增量
参考了,leetcode官方题解的方法,使用计数的方式算法首先统计出每个数出现的次数,然后从小到大遍历每个数 x:如果 x 出现了两次以上,就将额外出现的数记录下来(例如保存到一个列表中);如果 x 没有出现过,那么在记录下来的数中选取一个 v,将它增加到 x,需要进行的操作次数为x - v。我们还可以对该算法进行优化,使得我们不需要将额外出现的数记录下来。还是以 [1, 1, 1, ...原创 2020-03-22 13:03:58 · 125 阅读 · 0 评论 -
Leetcode 365.水壶问题
有明确的初始状态和最终状态可以使用BFS来解决,主要考虑下一步可能状态next的求解,是个体力活import java.util.*;class Solution { private int x; private int y; private HashSet<String> status = new HashSet<>(); ...原创 2020-03-21 16:08:51 · 185 阅读 · 0 评论 -
Leetcode 面试题40. 最小的k个数
直接使用API函数调用快速排序,面试种肯定是不行的!利用快速排序的分区思想,我们知道快排的划分函数每次执行完后都能将数组分成两个部分,小于等于分界值 pivot 的元素的都会被放到数组的左边,大于的都会被放到数组的右边,然后返回分界值的下标pos。那么:如果pos = k 直接返回pos<k 对左边再次分区,因为正好第k大的数一定再左边,我们要找到它pos<k对左边再次分...原创 2020-03-20 13:37:13 · 121 阅读 · 0 评论 -
Leetcode 494. 目标和
给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 +和-。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数S 的所有添加符号的方法数。dp数组的含义: dp[i][j] 表示用数组中的前 i 个元素,组成和为 j 的方案数状态转移方程:dp[i][j] = dp[i - 1][j - num...原创 2020-03-17 20:10:14 · 206 阅读 · 0 评论 -
Leetcode 474. 一和零
在计算机界中,我们总是追求用有限的资源获取最大的收益。现在,假设你分别支配着 m个0 和 n个 1。另外,还有一个仅包含 0和 1 字符串的数组。你的任务是使用给定的 m个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个0 和 1 至多被使用一次。注意:给定 0和 1 的数量都不会超过 100。给定字符串数组的长度不会超过 600。思路:01背包的变换问...原创 2020-03-16 00:21:39 · 97 阅读 · 0 评论 -
leetcode 695. 岛屿的最大面积
给定一个包含了一些0和 1的非空二维数组grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1(代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为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...原创 2020-03-15 15:31:26 · 215 阅读 · 0 评论 -
搜索推荐系统
题目描述给你一个产品数组 products和一个字符串 searchWord ,products 数组中每个产品都是一个字符串。请你设计一个推荐系统,在依次输入单词 searchWord 的每一个字母后,推荐 products 数组中前缀与searchWord相同的最多三个产品。如果前缀相同的可推荐产品超过三个,请按字典序返回最小的三个。请你以二维列表的形式,返回在输入searchWord...原创 2020-03-14 21:44:21 · 246 阅读 · 0 评论 -
盛最多水的容器
题目描述: 给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。解法1:暴力法思路: 对所有的线两两求出面积 时间复杂度O(n2)解法2:...原创 2020-03-14 20:28:59 · 226 阅读 · 0 评论 -
组合总数问题
题目描述: 给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。组合数思路:先自顶向下考虑这个问题,拿这个例子来说,用数字1,2,3来组成4. 考虑组合成4的所有可能,也就是考虑组成 3(4-1) , 2(4-2) , 1(4-3) 的所有可能.也就是下面这张图所以这道题还是比较容易的代码:class Solution { publi...原创 2020-03-14 20:02:17 · 224 阅读 · 0 评论