
LeetCode 力扣 刷题
Eric加油学!
头秃即实力
展开
-
【LeetCode刷题】 题目汇总 -java
数组简单1、两数之和https://blog.youkuaiyun.com/m0_56698268/article/details/12356598926、删除有序数组中的重复项https://blog.youkuaiyun.com/m0_56698268/article/details/12356609927、移除元素https://blog.youkuaiyun.com/m0_56698268/article/details/12356617535、搜索插入位置https://blog.youkuaiyun.com原创 2022-03-18 09:27:09 · 1428 阅读 · 0 评论 -
【LeetCode刷题】237 删除链表中的节点
题目请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。题目数据保证需要删除的节点 不是末尾节点 。示例这题其实真的简单,只能直接访问到给定要删除的节点,本来删除是要前驱节点的next指针指向删除节点的后继节点,但是访问不到前驱节点。可以使得后继节点的值 直接 赋给 当前要删除的节点,这样就相当于删除node的后继节点了也就是要删除 [4,5,1,9]中的5,我把后面1的值赋给5 变成[4,1,1原创 2022-04-08 09:14:14 · 312 阅读 · 0 评论 -
【LeetCode刷题】234 回文链表 java
题目给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。示例方法一:用栈的思想,先遍历完整个链表求出长度len,如果是偶数,则把前半部分入栈,如果是奇数,则需要额外跳过一个节点。然后从后半部分的值与栈中出栈元素一个一个比较/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode.原创 2022-04-08 09:12:50 · 241 阅读 · 0 评论 -
【LeetCode刷题】206 反转链表 java
题目给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例方法一:迭代比如需要链表为 1->2->3->4->null ,反转后就是null <--1 <-- 2 <-- 3 <-- 4class Solution { public ListNode reverseList(ListNode head) { ListNode prev = null; ListNode cu.原创 2022-04-08 09:11:11 · 996 阅读 · 1 评论 -
【LeetCode刷题】155 最小栈 java
题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶部的元素。 int getMin() 获取堆栈中的最小元素。 示例引入辅助栈minStack的原因是 不可能用一个min来保存当前栈的最小值,因为一原创 2022-04-08 09:05:12 · 425 阅读 · 0 评论 -
【LeetCode刷题】145 二叉树的后序遍历 java
题目给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。示例方法一:递归class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); postorder(root,res); return res;原创 2022-04-08 09:03:34 · 463 阅读 · 0 评论 -
【LeetCode刷题】144 二叉树的前序遍历 java
题目给你二叉树的根节点root,返回它节点值的前序遍历。示例方法一:递归。和中序的递归差不多class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); preorder(root,res); return re...原创 2022-04-08 09:01:59 · 593 阅读 · 0 评论 -
【LeetCode刷题】94 二叉树的中序遍历 java
题目给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。示例方法一:迭代其实中序遍历的思想就是:左根右。 我们可以new一个链表res来保存弹栈元素最终输出,并且使用链栈来记录当前节点。思想就是,从根节点开始,依次将其左孩子入栈,直至null。接着每弹栈一个元素,查看其是否有右子树,如果有,将其右子树依旧按照从右子树的根开始把左分支依次入栈。直至最后栈为空或者根为空。/** * Definition for a binary tree node. * public原创 2022-04-07 20:24:38 · 558 阅读 · 0 评论 -
【LeetCode刷题】20 有效的括号
题目给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例方法一:不用HashMap利用栈解决括号匹配问题,其实就是如果遇到左括号,就将其入栈,如果是右括号就与栈顶元素比较 (ch为 stack.pop(),同时弹栈),如果可以匹配的上,比如此时字符是 ),栈顶元素是 ( ,就匹配成功。如果不匹配就false,最后可以返回 stack.empt原创 2022-04-07 20:23:07 · 348 阅读 · 0 评论 -
【LeetCode刷题】203 移除链表元素 java
题目给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例方法一: 先对头节点做处理,使其不为valclass Solution { public ListNode removeElements(ListNode head, int val) { //删除值相同的头结点后,可能新的头结点也值相等,用循环解决 while(head!=null&&am.原创 2022-03-26 20:48:27 · 143 阅读 · 0 评论 -
【LeetCode刷题】160 相交链表 java
题目给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:示例方法一:先遍历两个链表得到各自长度,然后求出总节点的差值,使长的链表先遍历差值数量的节点数,再A、B一起遍历,如果相等,则返回其节点。/** * Definition for singly-linked list. * public class ListNode { * int val.原创 2022-03-26 20:45:59 · 731 阅读 · 0 评论 -
【LeetCode刷题】141 环形链表 java
题目给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。示例方法一:头铁遍历法因为节点最多也就10000个,所以设置一个计数器为10001,如果10001...原创 2022-03-26 20:40:32 · 1024 阅读 · 0 评论 -
【LeetCode刷题】83 删除排序链表中的重复元素 java
题目给定一个已排序的链表的头head,删除所有重复的元素,使每个元素只出现一次。返回已排序的链表。示例/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(i...原创 2022-03-26 20:37:26 · 690 阅读 · 0 评论 -
【LeetCode刷题】21 合并两个有序链表
题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例方法一:定义一个虚拟头节点,和一个尾指针。较小者插入,动态修改尾指针最后虚拟头节点的下一个节点就是头节点/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * L.原创 2022-03-26 20:35:49 · 1554 阅读 · 0 评论 -
【LeetCode刷题】349 两个数组的交集
题目给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序示例class Solution { public int[] intersection(int[] nums1, int[] nums2) { Map<Integer,Integer> map1 = new HashMap<>(); Map<Integer,Integer>.原创 2022-03-22 11:18:29 · 103 阅读 · 0 评论 -
【LeetCode刷题】303 区域和检索 -数组不可变 java
题目给定一个整数数组 nums,处理以下类型的多个查询:计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= right 实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象 int sumRange(int i, int j) 返回数组 nums 中索引 left 和 right 之间的元素的 总和 ,包含 left 和 right 两点(也就是 nums[left] +原创 2022-03-22 11:17:34 · 911 阅读 · 0 评论 -
【LeetCode刷题】283 移动的零 java
题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例创建两个指针i和j,第一次遍历的时候指针j用来记录当前有多少非0元素。即遍历的时候每遇到一个非0元素就将其往数组左边挪,第一次遍历完后,j指针的下标就指向了最后一个非0元素的下一个位置。 第二次遍历的时候,起始位置就从j开始到结束,将剩下的这段区域内的元素全部置为0。class Solution { public vo.原创 2022-03-22 11:16:33 · 654 阅读 · 0 评论 -
【LeetCode刷题】268 丢失的数字 java
题目给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。示例方法一:class Solution { public int missingNumber(int[] nums) { Arrays.sort(nums); int n = nums.length; if(n == 0) return 0; if(nums[0] .原创 2022-03-22 11:15:00 · 604 阅读 · 0 评论 -
【LeetCode刷题】228 汇总区间 java
题目给定一个 无重复元素 的 有序 整数数组 nums 。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。列表中的每个区间范围 [a,b] 应该按如下格式输出:"a->b" ,如果 a != b "a" ,如果 a == b示例class Solution { public List<String> summaryRa.原创 2022-03-22 11:13:29 · 968 阅读 · 0 评论 -
【LeetCode刷题】219 存在重复元素2
题目给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。示例class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { Map<Integer,Integer> map = n.原创 2022-03-20 15:45:48 · 441 阅读 · 0 评论 -
【LeetCode刷题】217 存在重复元素
题目给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false示例方法一:HashMapclass Solution { public boolean containsDuplicate(int[] nums) { Map<Integer,Integer> map = new HashMap<>(); int n = nums.length; .原创 2022-03-20 15:44:03 · 449 阅读 · 0 评论 -
【LeetCode刷题】169 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。方法一:HashMap每个值初始value都为1,每重复一次,value+1,最后循环遍历,value大于n/2的就是多数元素class Solution { public int majorityElement(int[] nums) { int n = nums.length; M原创 2022-03-20 15:31:14 · 185 阅读 · 0 评论 -
【LeetCode刷题】136、只出现一次的数字 - java
题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例方法方法一:排序遍历法先将其进行排序,因为重复的只可能有2个同样的值,所以与其前后一定不可能都相同。再排出边界的情况class Solution { public int singleNumber(int[] nums) { Arrays.sort(nums); .原创 2022-03-20 15:09:49 · 176 阅读 · 0 评论 -
【LeetCode刷题】121、买股票的最佳时机 - java
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。class Solution { public int maxProfit(int[] prices) { int minPrice = prices[0];//最低价格原创 2022-03-20 15:06:38 · 439 阅读 · 0 评论 -
【LeetCode刷题】119 杨辉三角2 -java
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。class Solution { public List<Integer> getRow(int rowIndex) { List<Integer> row = new ArrayList<>(); if(rowIndex == 0){ row.add(1);原创 2022-03-19 10:14:39 · 123 阅读 · 0 评论 -
【LeetCode刷题】118 杨辉三角 -java
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> generate = new ArrayList<>(); //new一个List用来存放杨.原创 2022-03-19 10:11:45 · 167 阅读 · 0 评论 -
【LeetCode刷题】108 将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。这个题目一看就感觉需要用到递归算法,所以要考虑他的边界条件,如何添加虚节点 (left>right)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNod原创 2022-03-19 10:10:35 · 172 阅读 · 0 评论 -
【LeetCode刷题】88、合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。方法一:最简单的就是 直接把nums2原创 2022-03-19 10:08:37 · 819 阅读 · 0 评论 -
【LeetCode刷题】66 加一 -java
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。分三种情况,分别讨论。1、首先就是,如果数组最后一位是小于9的,则只需将数组最后一位加1就可以直接输出了。2、其次就是,当数组的最后一位是9时,当加1之后就会变成10,所以我们可以对整个遍历,从后往前遍历,只要加1等于10,则将该位置赋值为0,并将前一位加1,一直循环到第0位,如果第0位不等于10,.原创 2022-03-19 10:05:32 · 257 阅读 · 0 评论 -
【LeetCode刷题】53 最大子数组合 -java
题目:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例:方法:顺序遍历:如果数组中有正数,则所求的最大子数组的首位一定是正数的所以如果当前csum的值为负数,就直接归零,从下一个位置重新算。否则,就一直加下去class Solution { public int maxSubArray(int[] nums) { int csum = 0;原创 2022-03-18 09:26:29 · 484 阅读 · 0 评论 -
【LeetCode刷题】35 搜索插入位置 -java
题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法示例:方法:折半class Solution { public int searchInsert(int[] nums, int target) { int i=0,j=nums.length-1,t=0; while(i<=j){ t=(.原创 2022-03-18 09:21:17 · 231 阅读 · 0 评论 -
【LeetCode刷题】 27 移除元素 -java
题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素示例:class Solution { public int removeElement(int[] nums, int val) { int n = nums.length; int.原创 2022-03-18 09:19:09 · 6632 阅读 · 0 评论 -
【LeetCode刷题】1 两数之和 -java
题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例:方法一:暴力法 O(n^2)class Solution { public int[] twoSum(int[] nums, int target) { for(int i=0;i...原创 2022-03-22 11:11:52 · 130 阅读 · 0 评论