![](https://img-blog.csdnimg.cn/20210830092627246.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode算法刷题
文章平均质量分 60
算法学习心得的分享
Itfuture03
只为造就未来梦想!
展开
-
【LeetCode-136、137、260】只出现一次的数字 [难度:简单、中等]
x 显然不会等于 0,因为如果 x=0,那么说明 x1=x2,这样 x1和 x2就不是只出现一次的数字了。因此,我们可以使用位运算 x & -x取出 x 的二进制表示中最低位那个 1,设其为第 l 位,那么 x1 和 x2中的某一个数的二进制表示的第 l 位为 0,另一个数的二进制表示的第 l 位为 1。这样一来,对于数组中的每一个元素 x,我们使用位运算 (x >> i) & 1 得到 x的第 i个二进制位,并将它们相加再对 3取余,得到的结果一定为 0 或 1,即为答案的第 i个二进制位。原创 2023-10-16 21:47:21 · 158 阅读 · 0 评论 -
【位运算】位运算的妙用技巧
位运算的妙用技巧原创 2023-10-16 17:55:53 · 305 阅读 · 0 评论 -
【位运算】必知必会:二进制位的原码反码补码转换 以及 按位与&、按位或|、异或^
必知必会:二进制位的原码反码补码转换 以及 按位与&、按位或|、异或^原创 2023-10-16 15:43:46 · 808 阅读 · 5 评论 -
【LeetCode-282】给表达式添加运算符 [难度:困难]
给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,返回 所有 能够得到 target 的表达式。我们可以用「回溯法」来模拟这个过程。从左向右构建表达式,并实时计算表达式的结果。由于乘法运算优先级高于加法和减法运算,我们还需要保存最后一个连乘串(如 2*3*4)的运算结果。设字符串 num 的长度为 n,为构建表达式,我们可以往 num中间的 n−1 个空隙添加 + 号、- 号或 * 号,或者不添加符号。原创 2023-10-16 11:39:44 · 149 阅读 · 0 评论 -
【LeetCode-371】简简单单的求两数和(不允许使用+和-)
原题给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。不允许使用+ -来源:力扣(LeetCode)难度:中等链接:https://leetcode-cn.com/problems/sum-of-two-integers/解法既然要求不允许使用+和-,那自然sum方法也不可以!那么我们就只能想到位运算上了!有符号整数通常用补码来表示和存储,补码具有如下特征:正整数的补码与原码相同;负整数的补码为其原码除符号位外的所有位取反后加 1。可以将减法运算转原创 2021-12-23 10:49:24 · 3579 阅读 · 0 评论 -
【LeetCode-面试-股票问题】算法中所有股票问题汇总
股票问题是我们常见的算法问题,因为它可以考察我们对算法的理解以及我们的编程思维方式,同时它也是贪心算法跟动态规划的高度体现!下面是LeetCode上面所有的股票问题!121.买卖股票的最佳时机(easy)限定交易次数 k=1原题:给定一个数组 prices ,它的第i个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获原创 2021-12-22 12:03:00 · 759 阅读 · 0 评论 -
【LeetCode-0234】回文链表,包含单链表的翻转 难度:简单
原题L234.回文链表给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。输入:head = [1,2,2,1]输出:true来源:力扣(LeetCode)难度:简单链接:https://leetcode-cn.com/problems/palindrome-linked-list/解法我们首先想到前后比较,以中点值left==right为界限,以此来判断是否是回文!那么对于单链表,得找到它的中点不能通过计算直接索引原创 2021-12-14 11:18:14 · 212 阅读 · 0 评论 -
【LeetCode-0070】经典面试题爬楼梯问题 难度:简单
原题假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。来源:力扣(LeetCode)难度:简单链接:https://leetcode-cn.com/problems/climbing-stairs/解法方式一:动态规划我们是从第 0 级开始爬的,所以从第 0级爬到第 0 级我们可以看作只有一种方案,即 f(0)=1;从第 0 级到第 1 级也只有一种方案,即爬一级,f(1) = 1。这两个作原创 2021-12-13 10:16:42 · 418 阅读 · 0 评论 -
【LeetCode-0055】跳跃游戏——经典贪心算法问题 难度:中等
原题给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。来源:力扣(LeetCode)难度:中等链接:https://leetcode-cn.com/problems/jump-game/解法(两种)方式一:计算最远可跳位置该题,进原创 2021-12-11 10:22:04 · 1565 阅读 · 0 评论 -
【LeetCode-0239】滑动窗口最大值-单列队列,难度:困难
原题给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。来源:力扣(LeetCode)难度:困难链接:https://leetcode-cn.com/problems/sliding-window-maximum解法单列队列单列队列解决:保证单列队列递减性质通过保存索引来维持最大值在队首遍历,初始化窗口第一个窗口最大值,存入ans[0]遍历,比前原创 2021-12-10 11:18:53 · 98 阅读 · 0 评论 -
【LeetCode-114】二叉树展开为链表 :Morris&特殊的先序遍历 难度:中等
原题 给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。来源:力扣(LeetCode)难度:中等链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list解法因在下水平有限,探索出两种方法!方式一:使用类似Morris方法,找最原创 2021-12-09 10:54:27 · 560 阅读 · 0 评论 -
【LeetCode-0094】二叉树中序遍历,遍历问题的三种解法,难度简单
原题给定一个二叉树的根节点 root ,返回它的 中序 遍历。前序遍历:根左右中序遍历:左根右后序遍历:左右根以下三种解法作以修改可以实现三种遍历!解法三种方式一:递归代码如下: public List<Integer> inorderTraversal2(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); inorder(root, re原创 2021-12-08 11:29:01 · 187 阅读 · 0 评论 -
【LeetCode-0338】比特位计算 [难度:简单] 动态规划
原题L0338.比特位计算 给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 , 返回一个长度为 n + 1 的数组 ans 作为答案。 输入:n = 2 输出:[0,1,1]来源:力扣(LeetCode)难度:简单链接:https://leetcode-cn.com/problems/counting-bits/解法 这类题看似简单,但是在我们做出来的基础上,其实还有更高效的解法,比如我一开始也没原创 2021-12-08 10:27:30 · 246 阅读 · 0 评论 -
【LeetCode-00124】二叉树中的最大路径和 [难度:困难]
原题L00124二叉树的最大路径和 路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6输入:root = [-10,9,20,null,原创 2021-11-21 21:13:09 · 286 阅读 · 0 评论 -
【LeetCode-00226】翻转二叉树(剑指offer27:镜像二叉树) [难度:简单]
原题 这个题是ZJ大厂的一面手撕算法出现的,网上有两个版本,在LeetCode里是翻转二叉树,在剑指offer里是镜像二叉树。但是解题思路方法一致。L00226翻转二叉树翻转一棵二叉树剑指offer27镜像二叉树请完成一个函数,输入一个二叉树,该函数输出它的镜像。输入: 4 / \ 2 7 / \ / \ 1 3 6 9输出: 4原创 2021-11-21 20:08:02 · 502 阅读 · 0 评论 -
【LeetCode-00001】两数和[难度:简单]
原题L00001两数和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。来源:力扣(LeetCod原创 2021-11-20 10:31:16 · 194 阅读 · 0 评论 -
【LeetCode-00594】最长和谐子序列问题 [难度:简单]
原题L00594最长和谐子序列 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。 输入:nums = [1,3,2,2,5,2,3,7] 输出:5 解释:最长的和谐子序列是 [3,2,2,2,3]来源:力扣(LeetCode)难度:简单链接:https://lee原创 2021-11-20 10:03:25 · 94 阅读 · 0 评论 -
KMP算法三分钟学懂它!
KMP算法简介 KMP 算法是 D.E.Knuth、J,H,Morris 和 V.R.Pratt 三位神人共同提出的,称之为 Knuth-Morria-Pratt 算法,简称 KMP 算法。该算法相对于 Brute-Force(暴力)算法有比较大的改进,主要是消除了主串指针的回溯,从而使算法效率有了某种程度的提高。提取加速匹配的信息 上面说道 KMP 算法主要是通过消除主串指针的回溯来提高匹配的效率的,那么,它是则呢样来消除回溯的呢?就是因为它提取并运用了加速匹配的信息! 这种信息就是对于每原创 2021-10-13 09:56:55 · 76 阅读 · 0 评论 -
【秒懂i++运算】关于i++的底层实现原理
在编程学习中,好多人对于i++与++i非常得混乱,这里可能有人会说那有什么难的,i++是先用后自增,++i是先自增后调用,是的没错,既然那么自信,请往下阅读吧!既然都知道i++在做运算的时候,是先赋值再自加1,但底层究竟是怎样实现的呢?问题1:public class test1 { public static void main(String[] args) { int i=5; i=i++; System.out.println(i);.原创 2021-08-31 10:13:40 · 1651 阅读 · 1 评论