
Leecode_Easy
LeeCode简单题目题解
搬砖小jr~
随手记下学习笔记以便后续复盘
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
1-两数之和
1. 两数之和 - 力扣(LeetCode) (leetcode-cn.com) 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 思路 1、暴力解法,双循环 时间复杂度:O(N2) 空间复杂度:O(1) 自己代码 class Solution { public int[] twoSum原创 2021-09-21 20:54:04 · 77 阅读 · 0 评论 -
20-有效的括号
https://leetcode-cn.com/problems/valid-parentheses/ 题目 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 思路 双指针,一个在头一个在尾,遍历,若值不一样,则返回 以上思路错误,一个左括号需要一个右括号来匹配,不能一样 其他优解 思路 使用栈 一个左括号必须有相对应的右括号与之匹配 最开头的左括号要最后的右括号才能原创 2021-09-21 21:17:31 · 74 阅读 · 0 评论 -
21-合并两个有序链表
https://leetcode-cn.com/problems/merge-two-sorted-lists/ 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 思路 增加一个空链表c 双循环比较大小,依次加入链表c中 不可行,应用双指针 新增 新链表的 虚拟头节点以及头指针pre l1、l2分别对应两个链表头部,比较大小,改变pre指针指向,对应的l1、l2指针后移 代码 以下代码超出时间限制 循环结束条件 没有考虑一个链表走到底,另一个链表原创 2021-09-21 21:21:13 · 77 阅读 · 0 评论 -
53-最大子序和
题目 53. 最大子序和 - 力扣(LeetCode) (leetcode-cn.com) 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 思路 先排序,滑动窗口,双指针 审题错误,求得是最大和,而不是一个区间 连续、状态推导 以子序列的结束节点为基准 状态定义:以下标 i 为结束节点的最大子序列的和为 dp[i] 递推公式:dp[i] = ( dp[i-1] + nums[i] ,nums[i] ) 前一个状态大于零,加上;前一个状态小于零,加上原创 2021-09-21 21:22:37 · 72 阅读 · 0 评论 -
70-爬楼梯
https://leetcode-cn.com/problems/climbing-stairs/ 题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? **注意:**给定 n 是一个正整数。 思路 存在状态推导,使用动态规划 下标为i:爬到第i层,有dp[i]种方法 初始化,没有第0层。dp[1]=1、dp[2]=2 当前dp[i]可由两个方向推出来 dp[i-1]层的每种方法再跳一层 dp[i-2]的每种方法再跳两层 所以dp[原创 2021-09-21 21:23:21 · 96 阅读 · 0 评论 -
94-二叉树的中序遍历
https://leetcode-cn.com/problems/binary-tree-inorder-traversal/ 方法一、递归 class Solution { //中止条件:节点为空 //参数:存遍历节点的列表、当前root //递归逻辑,左中右 public void preorder(TreeNode root,List<Integer> result){ if(root == null)原创 2021-09-21 21:23:56 · 89 阅读 · 0 评论 -
101-对称二叉树
https://leetcode-cn.com/problems/symmetric-tree/ 题目 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / 2 2 / \ / 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / 2 2 \ 3 3 思路 如例[1,2,2,3,4,4,3] 前序遍历:1 2 3 4 2 4 3 中序遍历:3 2 4 1 4 2 3 后序遍历:原创 2021-09-21 21:24:36 · 120 阅读 · 0 评论 -
104-二叉树的最大深度
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/ 题目 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回它的最大深度 3 。 思路 递归 找出终止条件:当前节点为空 找出返回值:节点为空时说明高度为 0,所以返原创 2021-09-21 21:25:20 · 107 阅读 · 0 评论 -
121-买卖股票的最佳时机
121. 买卖股票的最佳时机 - 力扣(LeetCode) (leetcode-cn.com) 题目 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 示例 1: 输入:[7,1,5,3,6,4] 输出:5 解释:在第 2 天(股票价格 = 1)的时候买入,原创 2021-09-21 21:25:58 · 78 阅读 · 0 评论 -
136-只出现一次的数
https://leetcode-cn.com/problems/single-number/ 题目 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 思路 使用额外空间set集合,遍历,添加进集合,碰见相同值,remove。最后迭代器输出最后的值 代码 class Soluti原创 2021-09-21 21:26:29 · 83 阅读 · 0 评论 -
141-环形链表
https://leetcode-cn.com/problems/linked-list-cycle/ 题目 给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 如果链表中存在环,则返回 true 。 否则,返回 false 。 思路原创 2021-09-22 10:04:30 · 70 阅读 · 0 评论 -
144-前序遍历
144. 二叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com) 递归 class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); preorder(root,res); return res;原创 2021-09-25 18:44:06 · 84 阅读 · 0 评论 -
155-最小栈
力扣 (leetcode-cn.com) 题目 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。 示例: 输入: [“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”] [[],[-2],[0],[-3],[],[],[],[]] 输出:原创 2021-09-22 10:05:40 · 83 阅读 · 0 评论 -
160-相交链表
https://leetcode-cn.com/problems/intersection-of-two-linked-lists/ 题目 给你两个单链表的头节点 headA 和 headB ,请你**找出并返回两个单链表相交的起始节点。**如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后,链表必须 保持其原始结构 。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5]原创 2021-09-22 10:06:56 · 317 阅读 · 0 评论 -
169-多数元素
https://leetcode-cn.com/problems/majority-element/ 题目 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:[3,2,3] 输出:3 示例 2: 输入:[2,2,1,1,1,2,2] 输出:2 思路 暴力遍历 哈希表 代码 class Solution { //用于统计数组键值对信息的函数 public原创 2021-09-22 10:09:08 · 68 阅读 · 0 评论 -
206-反转链表
https://leetcode-cn.com/problems/reverse-linked-list/ 题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 思路 代码 class Solution { public ListNode reverseList(ListNode head) { ListNode dummy = null; //ListNode p = dummy; ListNode cur = head;原创 2021-09-22 10:09:39 · 68 阅读 · 0 评论 -
226-反转二叉树
https://leetcode-cn.com/problems/invert-binary-tree/ 题目 翻转一棵二叉树。 示例: 输入: 输出: 思路 递归 结束条件:根节点为空 代码 class Solution { public TreeNode invertTree(TreeNode root) { dfs(root); return root; } private void dfs(TreeNode root){原创 2021-09-22 10:12:15 · 68 阅读 · 0 评论 -
234-回文链表
https://leetcode-cn.com/problems/palindrome-linked-list/ 题目 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表,,所谓的回文链表就是以链表中间为中心点两边对称。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head = [1,2,2,1] 输出:true 示例 2: 输入:head = [1,2] 输出:false 思路 先反转,在依次遍历比较两个链表的值 自己代码一 class Solution {原创 2021-09-22 10:13:31 · 70 阅读 · 0 评论 -
283-移动零
题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。 思路 必须在原数组操作,不能使用哈希表 采用双指针i和j i 用于遍历数组,且每次循环查看的是i所指元素 j 初始化为数组头元素 代码 class Solution { public void moveZeroes(int[] nums) {原创 2021-09-22 10:14:08 · 74 阅读 · 0 评论 -
338-比特啦计数
题目 给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。 示例 1: 输入:n = 2 输出:[0,1,1] 解释: 0 --> 0 1 --> 1 2 --> 10 示例 2: 输入:n = 5 输出:[0,1,1,2,1,2] 解释: 0 --> 0 1 --> 1 2 --> 10 3 --> 11 4 --> 100 5 --> 1原创 2021-09-22 10:14:56 · 74 阅读 · 0 评论 -
448-找到所有数组中消失的数字
https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/ 题目 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 示例 1: 输入:nums = [4,3,2,7,8,2,3,1] 输出:[5,6] 示例 2: 输入:nums = [1,1] 输出:[2] 思路 O(1)修改原数原创 2021-09-24 08:26:07 · 114 阅读 · 0 评论 -
461-汉明距离
https://leetcode-cn.com/problems/hamming-distance/ 题目 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y,计算并返回它们之间的汉明距离。 示例 1: 输入:x = 1, y = 4 输出:2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置。 示例 2: 输入:x = 3, y = 1 输出:1 思路 整数转为二进制不需要转化,整数用^进行原创 2021-09-24 23:17:16 · 81 阅读 · 0 评论 -
509-斐波那契数
509. 斐波那契数 - 力扣(LeetCode) (leetcode-cn.com) 题目 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你 n ,请计算 F(n) 。 思路 有很多重叠子问题,存在状态推导,使用动态规划 下标为i的斐波那契值为dp[i] 递推公式:f(n) = f(n-1)原创 2021-09-22 10:15:44 · 60 阅读 · 0 评论 -
543-二叉树的直径
https://leetcode-cn.com/problems/diameter-of-binary-tree/ 题目 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 思路 最大深度:从根节点到叶子节点最长的那条路径上的节点原创 2021-09-27 10:14:18 · 110 阅读 · 0 评论 -
617-合并二叉树
题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 示例 1: 输入: Tree 1 Tree 2 1 2原创 2021-09-27 14:05:52 · 87 阅读 · 0 评论