Leetcode
文章平均质量分 54
刷题总结
我不是小哥哥
这个作者很懒,什么都没留下…
展开
-
22. 括号生成
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。原创 2024-04-16 17:34:20 · 205 阅读 · 0 评论 -
43. 字符串相乘
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。原创 2024-04-16 17:01:22 · 397 阅读 · 0 评论 -
前缀和与差分
【代码】前缀和与差分。原创 2024-03-15 16:25:18 · 233 阅读 · 0 评论 -
228. 汇总区间
给定一个 无重复元素 的 有序 整数数组 nums。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x。列表中的每个区间范围 [a,b] 应该按如下格式输出:“a->b” ,如果 a!原创 2024-02-05 12:50:02 · 328 阅读 · 1 评论 -
位运算入门—— 36. 有效的数独
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。只需要根据以上规则,验证已经填入的数字是否有效即可。一个有效的数独(部分已被填充)不一定是可解的。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。空白格用 ‘.’ 表示。原创 2024-02-02 15:50:46 · 137 阅读 · 0 评论 -
KMP算法介绍
KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。记录已经匹配的文本内容,在不匹配时利用 前缀表找到 当字符不匹配的时候应该指针应该移动的位置。记录下标i之前(包括i)的字符串中,有多大长度的相同前缀后缀。前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串。后缀是指不包含第一个字符的所有以最后一个字符结尾的连续子串。j表示指针的前缀,所以j从-1开始遍历,不包括最后一个字符。i表示指针的后缀,所以i从1开始遍历,不包括第一个字符。原创 2024-01-31 17:35:57 · 131 阅读 · 0 评论 -
42.接雨水
对于下标 i,下雨后水能到达的最大高度等于下标 i两边的最大高度的最小值,下标i处能接的雨水量等于下标 i处的水能到达的最大高度减去 height[i]。解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。栈顶即为坑的下标,栈顶的下一个元素为坑左边的下标,当前如果大于栈顶,就为坑右边的下标。输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输入:height = [4,2,0,3,2,5]原创 2024-01-30 15:29:53 · 311 阅读 · 0 评论 -
栈和队列介绍
java中栈的实现方式:先进后出Stack<Integer> st = new Stack<Integer>();队列:常用LinkedList 集合,它实现了Queue 接口和List接口;LinkedList底层是一个双向链表队列主要分为阻塞和非阻塞,有界和无界、单向链表和双向链表之分;add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 remove 移除并返回队原创 2022-04-12 11:47:03 · 801 阅读 · 0 评论 -
字符串部分总结
字符数组char[] 与String的转换:char[ ] - > String:char [] str = {'a','b','c'};String s = new String(str); //方法一String s= String.valueOf(strToChars); ////方法二使用toString方法无法转换,调用toString()方法实际是调用Object类的toString()方法,结果是[类型@哈希值]。String - > char[ ]:char []原创 2022-04-03 15:32:48 · 360 阅读 · 0 评论 -
KMP简介
leecode 28#include<iostream>#include<cstring>using namespace std;/* KMP的经典思想就是: 当出现字符串不匹配时, 可以记录一部分之前已经匹配的文本内容, 利用这些信息避免从头再去做匹配。 next前缀表:保存回溯的位置。为了避免循环,存数时-1,匹配时+1(当不匹配时,可以多次回溯) 前缀:abcdef 不包括最后一个字符的子串——a/ab/abc/... 后缀:不包括开始一个字符的原创 2021-03-15 19:59:58 · 161 阅读 · 0 评论 -
链表部分总结
java链表类定义:和C++用“->”不同,对于类中的元素用“.”表示,public class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; }}链表添加删除节点时多用虚拟节点反转链表:原创 2022-03-27 11:41:17 · 578 阅读 · 0 评论 -
数组部分总结
二分查找:在返回结果时,有可能不等于target注意判断是返回>=,还是<=的结果。704.二分查找34.在排序数组中查找元素的第一个和最后一个位置69.x 的平方根704.二分查找二分查找主要用于有序数组,且无重复元素边界问题:左闭右闭:left可以等于right, 此时循环的条件为left <= right;判断当mid 不等于target时,此时left = mid + 1或者right = mid-1;左闭右开:left不能等于right, 此时循环的条原创 2022-03-24 10:18:58 · 2330 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置
34. 在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1原创 2022-03-18 17:59:44 · 1115 阅读 · 0 评论 -
2. 两数相加
https://leetcode-cn.com/problems/add-two-numbers给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]原创 2021-12-11 11:19:09 · 95 阅读 · 0 评论 -
Z 字形变换
https://leetcode-cn.com/problems/zigzag-conversion将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:strin原创 2021-12-07 11:59:26 · 143 阅读 · 0 评论 -
两数之和~三数之和
https://leetcode-cn.com/problems/two-sum给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0,原创 2021-12-04 12:46:58 · 162 阅读 · 0 评论 -
leetcode刷题总结
数组:一般考虑:双指针/数组翻转,可以减少空间复杂度轮转数组数组向左/向右轮转,首先考虑翻转数组。这样空间复杂度为O(1),比使用额外空间更好PS:k = k % nums.size();注意轮转的次数大于数组本身长度的情况。27.移除元素使用双指针,left && right,实现原地删除元素,最终left代表删除后的数组长度left代表赋值指针right代表下一步要处理的指针双指针可以都从头开始,最多遍历2遍也可以从首尾向中间移动,直到2指针相遇,只遍历一次。原创 2021-12-02 16:44:40 · 232 阅读 · 0 评论 -
买卖股票的时机系列总结
买卖股票的最佳时机 II给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)方法一、贪心由于买卖次数不受限制,而且没有代价,所有只需要使区间获利大于0,就可以进行交易class Solution {public: int maxProfit(vector<int>& pri.原创 2021-12-02 16:20:27 · 98 阅读 · 0 评论 -
350. 两个数组的交集 II
链接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2原创 2021-12-02 11:22:41 · 202 阅读 · 0 评论 -
142.环形链表II
题目链接:https://leetcode-cn.com/problems/linked-list-cycle-ii/该题求环形链表的入口点需要解决2个问题:判断是否成环怎么找入口问题1——判断是否成环:双指针:fast,slow定义fast每次走2步,slow每次走1步,每走一次两指针之间间距+1。如果有环那么fast和slow一定是在环里面相遇,而且fast比slow多走n圈。相遇时:slow走过x+yfast走过x+y+n(y+z)因为fast的速率时slow的2倍:2(x原创 2021-03-02 21:50:46 · 88 阅读 · 0 评论 -
59. 螺旋矩阵 II
题目:https://leetcode-cn.com/problems/spiral-matrix-ii/这个题n*n矩阵中模拟螺旋填入数据的过程,主要考察对边界控制。主要有四部分:递增:[left,right)[up,down)递减:[right,left)[down,up)我采用了左闭右开的边界。当left>right或者up>down时循环结束。PS:还要注意因为采用左闭右开区间时,当n为偶数时,最中间的值无法在循环中完成,需要单独填入。代码如下:class S原创 2021-02-10 12:02:32 · 119 阅读 · 0 评论