
leecode刷题笔记
未来可期,期许未来
这个作者很懒,什么都没留下…
展开
-
leecode:203. 移除链表元素
leecode:203. 移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。思路:有两种方法:不添加虚拟的头结点 和 添加虚拟头结点1)对于不添加虚拟头结点,考虑三种情况:a. 链表为nullb.head.val==valc.正常情况/** * Definition for singly-linked list. * public class ListNode { * int原创 2022-03-21 20:28:56 · 591 阅读 · 0 评论 -
leecode:707. 设计链表
leecode:707. 设计链表设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的原创 2022-03-21 19:41:19 · 155 阅读 · 0 评论 -
leecode:59. 螺旋矩阵 II
leecode:59. 螺旋矩阵 II给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。class Solution { public int[][] generateMatrix(int n) { //定义一个二维数组 int[][] nums = new int[n][n]; int count=1;//计数 int r=0;//行起始位置 int c=0;//列起始位置 i原创 2022-03-18 22:44:00 · 432 阅读 · 0 评论 -
leecode:209. 长度最小的子数组
leecode:209. 长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。思路:寻找连续最小子数组的情况满足滑动窗口当整个窗口的和小于给定的值,快指针便向右滑动使其和达到给定值;当整个滑动窗口的和大于给定的值时,慢指针便向右滑动缩小窗口的大小。class Solution原创 2022-03-18 21:02:19 · 501 阅读 · 1 评论 -
leecode: 150. 逆波兰表达式求值
leecode: 150. 逆波兰表达式求值根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。注意 两个整数之间的除法只保留整数部分。可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。注意:逆波兰表达式:也是后缀表达式思路:这里可以这么考虑:字符串数组中可以分为两类:数字字符串和运算符字符串。用栈来解决(因为栈的特性后进先出,比如:遇到运算符直接弹出紧挨着两个数字),遇数原创 2022-03-13 14:27:43 · 783 阅读 · 0 评论 -
leecode: 1047. 删除字符串中的所有相邻重复项
leecode: 1047. 删除字符串中的所有相邻重复项思路:利用栈的思想。定义一个栈,遍历字符串时,若栈为空便将字符入栈,若栈不为空,查看栈顶元素是否与此字符相等,相等便弹栈,并跳过此次循环。遍历完后就剩余相邻元素不重复的字符了。弹出一个个字符,可是得到的是反的字符(eg: ac),再进行反转。class Solution { public String removeDuplicates(String s) { //定义栈 Stack<Character>原创 2022-03-13 13:24:55 · 7133 阅读 · 0 评论 -
leecode:20. 有效的括号
leecode:20. 有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。对于括号匹配是使用栈解决的经典问题class Solution { public boolean isValid(String s) { //定义栈 Stack<Character> stack = new Stack<>();原创 2022-03-13 11:51:41 · 361 阅读 · 0 评论 -
225. 用队列实现栈
225. 用队列实现栈注意:栈是类,可以直接实例化队列是接口,不能被直接实例化,可以利用多态的思想用一个队列的实现类:LinkedList(底层是双向链表)栈的push: 等价于 队列的offer栈的pop: 等价于队列的pollpublic class MyStack { Queue<Integer> q1 = new LinkedList<>();// 定义一个队列与栈的顺序相同 Queue<Integer> q2 = new LinkedList原创 2022-03-12 22:44:02 · 900 阅读 · 0 评论 -
leecode:232. 用栈实现队列
leecode:232. 用栈实现队列思考:用栈实现队列,可以考虑将一个栈作为入栈,另一个栈作为出栈,配合使用。注意,入栈考虑第一个栈;出栈考虑用第二个栈class MyQueue { Stack<Integer> s1 = new Stack<>(); // 作为入栈 Stack<Integer> s2 = new Stack<>(); // 作为出栈 public MyQueue(){ } public void push(int原创 2022-03-12 21:11:34 · 519 阅读 · 0 评论 -
leecode::977. 有序数组的平方
leecode::977. 有序数组的平方给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。请你设计时间复杂度为 O(n) 的算法解决本问题思路:注意这里数组是非递减顺序,观察实例1的数组:[-4, -1, 0, 3, 10]通过平方后:[16, 1, 0, 9, 100], 可见16到0是递减的,0到100是递增的,相当于凹函数,肯定存在最小值==》于是想到二分法,定义两个指针,进行遍历(双指针法)class Solution {原创 2022-03-12 20:07:39 · 133 阅读 · 0 评论 -
leecode:27、移除元素
leecode:27、移除元素题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。利用快慢指针的思想(新数组把旧数组覆盖),保证仅使用 O(1) 额外空间。class Solution { public int removeElement(int[] nums, int val)原创 2022-03-12 17:53:40 · 97 阅读 · 0 评论 -
leecode:704、二分查找
leecode:704、二分查找题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。class Solution { public int search(int[] nums, int target) { //定义两指针 int l = 0; int r = nums.length-1; //利用循环进行二分 while(l<=r){ i原创 2022-03-12 17:26:18 · 114 阅读 · 0 评论