
算法
看了个寂寞
一时刷题一时爽,一直刷题一直爽!
展开
-
力扣每日一题:435. 无重叠区间
435. 无重叠区间给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重原创 2020-12-31 15:04:27 · 543 阅读 · 0 评论 -
力扣每日一题:1046. 最后一块石头的重量
有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为x 和y,且x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎;如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。示例:输入:[2,7,4,1,8,1]输出:1解释:先选出 7 和 8,得到 1,所以数...原创 2020-12-30 10:45:25 · 276 阅读 · 0 评论 -
DFS刷题:子集问题
78. 子集给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]class Solution { public List<List<Integer>> subsets(int[] nums) { ...原创 2020-12-30 10:22:49 · 359 阅读 · 0 评论 -
DFS刷题:77. 组合
DFS题主要还是递归+剪枝77. 组合给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。示例:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]画递归树根据搜索起点画出二叉树如果组合里有 1 ,那么需要在 [2, 3, 4] 里再找 1个数; 如果组合里有 2 ,那么需要在 [3, 4] 里再找 1数。注意:这里不能再考虑 1,因为包含 1...原创 2020-12-30 09:58:00 · 161 阅读 · 0 评论 -
力扣刷题:DFS题型:排列,组合问题
46. 全排列给定一个没有重复数字的序列,返回其所有可能的全排列。输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]class Solution { public List<List<Integer>> permute(int[] nums) { /* 定义状态变量: 1.depth:递归到第几层 2..原创 2020-12-28 15:06:31 · 569 阅读 · 0 评论 -
DFS算法力扣46. 全排列
参看:https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247484709&idx=1&sn=1c24a5c41a5a255000532e83f38f2ce4&chksm=9bd7fb2daca0723be888b30345e2c5e64649fc31a00b05c27a0843f349e2dd9363338d0dac61&scene=21#wechat_redirect1.DFS算法1)DFS...原创 2020-12-27 14:06:11 · 172 阅读 · 0 评论 -
力扣刷题:100. 相同的树
100. 相同的树给定两个二叉树,编写一个函数来检验它们是否相同。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int原创 2020-12-27 10:37:10 · 206 阅读 · 0 评论 -
二叉树层序遍历力扣刷题
102. 二叉树的层序遍历给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution {..原创 2020-12-26 19:02:17 · 236 阅读 · 0 评论 -
力扣刷题:297. 二叉树的序列化与反序列化
参看:https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247485871&idx=1&sn=bcb24ea8927995b585629a8b9caeed01&chksm=9bd7f7a7aca07eb1b4c330382a4e0b916ef5a82ca48db28908ab16563e28a376b5ca6805bec2&scene=178&cur_album_id=1318892385270808原创 2020-12-26 15:31:26 · 230 阅读 · 0 评论 -
二叉搜索树小结:力扣刷题
二叉搜索树(Binary Search Tree,简写 BST)首先,BST 的特性:1、对于 BST 的每一个节点node,左子树节点的值都比node的值要小,右子树节点的值都比node的值大。2、对于 BST 的每一个节点node,它的左侧子树和右侧子树都是 BST。一个重要的性质:BST 的中序遍历结果是有序的(升序)。注:这类题的解题思路利用二叉搜索树左小右大的特性 利用二叉搜索树中序遍历是升序的230. 二叉搜索树中第K小的元素升序排序,然后找第...原创 2020-12-25 19:24:59 · 168 阅读 · 0 评论 -
搜索二叉树BST的增删改查:力扣刷题
参看https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247488128&idx=2&sn=b8fb3fd2917f9ac86127054741cd5877&chksm=9bd7ec88aca0659ee0185b657663169169493e9df2063fa4d28b38a0b4d0dd698d0301937898&cur_album_id=1318896187793260544&scene=.原创 2020-12-25 19:05:33 · 216 阅读 · 0 评论 -
力扣652. 寻找重复的子树
题目给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。参看:https://mp.weixin.qq.com/s/LJbpo49qppIeRs-FbgjsSQ/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tree原创 2020-12-25 09:58:48 · 174 阅读 · 0 评论 -
构造二叉树之前序中序后序之间转换问题:力扣刷题
确定根节点的值 递归构造左右子树654. 最大二叉树给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。解析看这个:https://labuladong.gitbook.io/algo/shu-ju-jie-gou-xi-lie/2.3-shou-ba-shou-shua-.原创 2020-12-25 09:37:36 · 172 阅读 · 0 评论 -
二叉树:力扣刷题
226. 翻转二叉树把二叉树上的每一个节点的左右子节点进行交换/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode invertTr原创 2020-12-21 13:26:20 · 235 阅读 · 0 评论 -
二叉树刷题总结:力扣刷题
这篇文章写的太好了!https://labuladong.gitbook.io/algo/shu-ju-jie-gou-xi-lie/2.3-shou-ba-shou-shua-er-cha-shu-xun-lian-di-gui-si-wei/er-cha-shu-xi-lie-1一般二叉树的题离不开前序,中序,后序,层序遍历。(概念性的东西就不说了,很多博客都讲了,专注刷题)前序遍历:中左右中序遍历:左中右后序遍历:左右中层序遍历:类似于广度搜索,从左到右,从上到下顺着来。一.二原创 2020-12-21 11:21:47 · 364 阅读 · 1 评论 -
每日一题:力扣746. 使用最小花费爬楼梯
数组的每个索引作为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。示例 2:输入: cost = [1, 100,...原创 2020-12-21 09:12:54 · 179 阅读 · 0 评论 -
每日一题:力扣290. 单词规律
给定一种规律 pattern和一个字符串str,判断 str 是否遵循相同的规律。这里的遵循指完全匹配,例如,pattern里的每个字母和字符串str中的每个非空单词之间存在着双向连接的对应规律。示例1:输入: pattern = "abba", str = "dog cat cat dog"输出: true示例 2:输入:pattern = "abba", str = "dog cat cat fish"输出: false示例 3:输入: pattern =...原创 2020-12-16 12:23:21 · 171 阅读 · 0 评论 -
每日一题:力扣738. 单调递增的数字
题目链接:https://leetcode-cn.com/problems/monotone-increasing-digits/题目给定一个非负整数N,找出小于或等于N的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字x和y满足x <= y时,我们称这个整数是单调递增的。)示例 1:输入: N = 10输出: 9示例 2:输入: N = 1234输出: 1234示例 3:输入: N = 332输出:...原创 2020-12-15 10:19:26 · 271 阅读 · 0 评论 -
力扣:面试题 01.03. URL化
题目URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)示例 1:输入:"Mr John Smith ", 13输出:"Mr%20John%20Smith"示例 2:输入:" ", 5输出:"%20%20%20%20%20"想法这里一开始我想的是直接在原字符串S中做改变,后来发现这种想法不对。下...原创 2020-12-14 22:13:51 · 205 阅读 · 0 评论 -
力扣:面试题 01.02. 判定是否互为字符重排
题目给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。示例 1:输入: s1 = "abc", s2 = "bca"输出: true示例 2:输入: s1 = "abc", s2 = "bad"输出: false说明:0 <= len(s1) <= 1000 <= len(s2) <= 100想法这道题感觉和上一篇https://blog.youkuaiyun.com/gtjsjj/article.原创 2020-12-14 16:21:27 · 300 阅读 · 0 评论 -
每日一题:力扣49. 字母异位词分组
题目给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"]输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明:所有输入均为小写字母。不考虑答案输出的顺序。想法1.排序按照字符排序,排序过后的字符串一定是相同的class Solution { public List&l...原创 2020-12-14 14:57:16 · 228 阅读 · 0 评论 -
双指针1:力扣刷题
题目:力扣167. 两数之和 II - 输入有序数组给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1必须小于index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 ...原创 2020-12-14 14:23:23 · 158 阅读 · 0 评论 -
每日一题:力扣217. 存在重复元素
题目给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true想法1.暴力求解,双层循环(不推荐,超时)2.排序,若有重复,则一定是相邻元素,比方法1少一层循环3.哈希表,将元素插入哈希表,如.原创 2020-12-13 10:43:59 · 258 阅读 · 0 评论 -
力扣:面试题 01.01. 判定字符是否唯一
题目实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例 1:输入: s = "leetcode"输出: false示例 2:输入: s = "abc"输出: true参考https://leetcode-cn.com/problems/is-unique-lcci/solution/shu-zu-wei-yun-suan-deng-6chong-jie-jue-fang-shi-b/https://leetcode-cn.com/problems/is-uni.原创 2020-12-12 21:55:10 · 412 阅读 · 0 评论 -
每日一题:力扣376. 摆动序列
题目如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如,[1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3)是正负交替出现的。相反, [1,4,7,2,5]和[1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删...原创 2020-12-12 19:52:57 · 192 阅读 · 0 评论 -
力扣链表问题小结
链表问题:面试常问问题(一般是与链表的长度和位置有关):①获取倒数第k个元素②获取中间位置的元素③判断链表是否存在环④判断环的长度解决方法:双指针(一种思想)①获取倒数第k个元素题目剑指 Offer 22. 链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:.原创 2020-12-09 18:50:07 · 318 阅读 · 0 评论 -
每日一题:力扣62. 不同路径
题目描述:一个机器人位于一个 m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?想法:动态规划这类题一般都是定义dp[i][j],网格类动态规划问题。首先要明白dp[i][j]代表的意思。在本题中,dp[i][j]表示到达坐标(i,j)时的最大路径值。注:这类题中dp[i][j]一般都与dp[i-1][j],dp[i][j-1]有关系。.原创 2020-12-09 16:04:52 · 141 阅读 · 0 评论 -
替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路倒着来看,一个空格变为%20,相当于一个空格变为三个空格,所以p1从右向左,每遇到一个空格,给定的字符串数组str就添加两个空格,即str.append(" ");p2指向扩建的字符串数组的末尾,当p1不是空格时,将p1的字符复制到p2,当p1是空格的时候,p2依次变为02%(倒着来)代码public class .原创 2020-09-13 17:44:15 · 101 阅读 · 0 评论 -
二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路1 1 2 3 4 5 6 7 8 9 从右上角开始(数字“3”),可以知道左边的数都比3小,下边的数都比原创 2020-09-13 16:20:44 · 107 阅读 · 0 评论 -
21.字符流中第一个不重复的字符
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。(如果当前字符流没有存在出现一次的字符,返回#字符。)思路用一个哈希表来存储每个字符及其出现的次数,另外用一个字符串 s 来保存字符流中字符的顺序。每次插入的时候,在字符串 s 中插入该字符,然后在哈希表中查看是否存在该字符,如果存在则它的 value 加1,如果不存在,它在哈希转载 2020-06-23 14:42:53 · 185 阅读 · 0 评论 -
20.斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39思路和跳台阶类似https://blog.youkuaiyun.com/gtjsjj/article/details/106707272代码public class Solution { public int Fibonacci(int n) { if(n == 0) return 0; if(n原创 2020-06-23 10:33:31 · 169 阅读 · 0 评论 -
19.左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!思路https://www.nowcoder.com/questionTerminal/12d959b108cb42b1ab72cef4d36af5ec?f=discussion截取字符串,见代码代原创 2020-06-23 10:22:06 · 93 阅读 · 0 评论 -
18.数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。(保证base和exponent不同时为0)思路快速幂https://www.nowcoder.com/questionTerminal/1a834e5e3e1a4b7ba251417554e07c00?answerType=1&f=discussion假设我们求,如果我们知道,那么,所以但是还有个小问题,如果n是偶数,那么上述没问题。如果n是奇数,,...原创 2020-06-19 16:03:22 · 160 阅读 · 0 评论 -
17.链表中环的入口结点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路代码原创 2020-06-19 15:26:50 · 102 阅读 · 0 评论 -
16.剪绳子
题目描述给你一根长度为n(2 <= n <= 60)的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。思路1链接:https://www.nowcoder.com/questionTerminal/57d85990ba5b440ab888fc72原创 2020-06-17 10:33:55 · 144 阅读 · 0 评论 -
15.旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路链接:https://www.nowcoder.com/questionTerminal/9f3231a991af4f55b95579b44b7a01ba?answerType=1&f=discussion来源原创 2020-06-17 09:25:25 · 128 阅读 · 0 评论 -
14.两个链表的第一个公共节点
题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)思路链接:https://www.nowcoder.com/questionTerminal/6ab1d9a29e88450685099d45c9e31e46?answerType=1&f=discussion来源:牛客网方法:双指针法假如例子如下:显然第一个公共结点为8,但是链表A头结点到8的长度为2,链表B头结点到8的长度为3,显然不好办?原创 2020-06-17 08:52:24 · 163 阅读 · 0 评论 -
13.整数中1出现的次数
题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?(例如:1~13中包含1的数字有1、10、11、12、13因此共出现6次。)思路1先求每个整数中1的个数,再求1~n中1的个数。如:1111%10得到个位数111/10得到十位数1所以11中有两个1代码1public class Solution { public int NumberOf1Between1AndN_Solution(int n) { if(n<原创 2020-06-17 08:26:41 · 165 阅读 · 0 评论 -
12.二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路1原始数据-1,再与原始数据做&操作。代码1public class Solution { public int NumberOf1(int n) { int ans=0; //当n=0时,循环停止 while(n!=0){ ans++; /*以1100为例: 1100-1=1011原创 2020-06-14 08:29:18 · 247 阅读 · 0 评论 -
11.平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。思路由题意可知,左右子树的高度差的绝对值小于等于1 1.从下向上遍历(剪枝) 2.如果左子树不平衡,那么整棵树不平衡 3.如果右子树不平衡,那么整棵树不平衡 4.如果左右子树高度差的绝对值>1,那么整棵树不平衡代码public class Solution { public boolean IsBalanced_Solution(TreeNode root) { int ans...原创 2020-06-14 07:53:08 · 159 阅读 · 0 评论