
算法程序刷题
文章平均质量分 58
用于记录在PAT平台中刷题的一些方法和灵感,与大家分享。
koumaisui
量变->质变
展开
-
【LeetCode1234. 替换子串得到平衡字符串】
【代码】【LeetCode1234. 替换子串得到平衡字符串】原创 2023-02-13 20:11:40 · 260 阅读 · 1 评论 -
【LeetCode】55. 跳跃游戏
leetcode题解-55.跳跃游戏原创 2022-11-08 20:17:09 · 222 阅读 · 0 评论 -
回溯算法题型总结
回溯算法的相关总结原创 2022-10-30 20:03:52 · 184 阅读 · 0 评论 -
LeetCode-37. 解数独
LeetCode-解数独原创 2022-10-29 22:12:38 · 174 阅读 · 0 评论 -
N皇后问题
LeetCode-N皇后-回溯算法原创 2022-10-28 19:58:52 · 129 阅读 · 0 评论 -
LeetCode-105/106
关于二叉树的构造,利用前序与中序、后序与中序来构造二叉树原创 2022-09-21 21:44:12 · 193 阅读 · 0 评论 -
854. 相似度为 K 的字符串
回溯法+剪枝操作,LeetCode中hard难度题型原创 2022-09-21 20:33:56 · 184 阅读 · 0 评论 -
827. 最大人工岛
LeetCode每日一题解题题解原创 2022-09-18 16:00:11 · 171 阅读 · 0 评论 -
670. 最大交换
LeetCode的刷题题解原创 2022-09-13 19:38:28 · 197 阅读 · 0 评论 -
669. 修剪二叉搜索树
LeetCode二叉树专题题解原创 2022-09-10 15:42:46 · 150 阅读 · 0 评论 -
【12. 整数转罗马数字】
LeetCood刷题题解之——【12. 整数转罗马数字】原创 2022-08-09 21:58:38 · 133 阅读 · 0 评论 -
单调栈-42. 接雨水
leetcode刷题-单调栈应用原创 2022-07-01 22:11:29 · 1117 阅读 · 0 评论 -
单调栈-503. 下一个更大元素 II
关于单调栈的题目题解原创 2022-07-01 20:56:16 · 261 阅读 · 0 评论 -
【459. 重复的子字符串】
459. 重复的子字符串1.题目描述2.解题思路及具体代码1.题目描述 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 输入: s = "abab" 输出: true 解释: 可由子串 "ab" 重复两次构成。 输入: s = "aba" 输出: false 输入: s = "abcabcabcabc" 输出: true 解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)2.解题思路及具体代码方法一:枚举原创 2022-03-25 15:12:20 · 256 阅读 · 0 评论 -
【28.实现strStr】
28.实现strStr1.题目描述2.解题思路及具体代码1.题目描述给你两个字符串 haystack 和 needle ,请你在 haystack字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。 说明: 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。原创 2022-03-24 21:33:58 · 609 阅读 · 0 评论 -
【151. 颠倒字符串中的单词】
151. 颠倒字符串中的单词1.题目描述2.解题思路及代码1.题目描述给你一个字符串 s ,颠倒字符串中 单词 的顺序。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。 输入:s = "the sky is blue" 输出:"blue is sky原创 2022-03-21 19:48:24 · 651 阅读 · 0 评论 -
【541. 反转字符串 II】
541. 反转字符串 II1.题目描述2.解题思路及代码1.题目描述 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。 输入:s = "abcdefg", k = 2 输出:"bacdfeg" 输入:s = "abcd", k = 2 输出:"bacd"2.解题原创 2022-03-20 21:47:09 · 326 阅读 · 0 评论 -
【5. 三数之和+18. 四数之和+454. 四数相加 II】
15. 三数之和+18. 四数之和+454. 四数相加 II15. 三数之和1.题目描述2.解题思路及代码18. 四数之和1.题目描述2.解题思路及代码454. 四数相加 II1.题目描述2.解题思路及代码15. 三数之和1.题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:==答案中不可以包含重复的三元组。==输入:nums = [-1,0,1,2,-1,-4]原创 2022-03-19 19:33:19 · 190 阅读 · 0 评论 -
【350. 两个数组的交集II】
这里写目录标题1.题目描述2.解题思路及代码1.题目描述给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]2.解题思路及代码方法一:哈希表思路原创 2022-03-19 19:04:24 · 122 阅读 · 0 评论 -
【349. 两个数组的交集】
349. 两个数组的交集1.题目描述2.解题思路及代码1.题目描述 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。 输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 解释:[4,9] 也是可通过的2.解题思路及代码方法一:哈希表法思路:1,先将一个数原创 2022-03-19 18:38:54 · 335 阅读 · 0 评论 -
【438.找到字符串中所有字母异位词】
438.找到字符串中所有字母异位词1.题目描述2.解题思路及代码1.题目描述给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。输入: s = "cbaebabacd", p = "abc"输出: [0,6]解释:起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。输入: s =原创 2022-03-19 17:27:17 · 801 阅读 · 0 评论 -
【49-字母异位词分组】
49-字母异位词分组1.题目描述2.解题思路及代码1.题目描述给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。 Input: strs = ["eat","tea","tan","ate","nat","bat"] Output: [["bat"],["nat","tan"],["ate","eat","tea"]] Input: strs = [""] Output:原创 2022-03-19 17:09:39 · 279 阅读 · 0 评论 -
【383-赎金信】
383-赎金信1.题目描述2.解题思路及代码1.题目描述给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。输入:ransomNote = "a", magazine = "b"输出:false输入:ransomNote = "aa", magazine = "ab"输出:false原创 2022-03-19 16:49:09 · 229 阅读 · 0 评论 -
【242.有效的字母异位词】
LeetCode刷题笔记原创 2022-03-19 16:29:07 · 104 阅读 · 0 评论 -
【哈希表专题-基础知识】
刷题时,关于哈希表必须要掌握的基础知识原创 2022-03-19 16:00:14 · 533 阅读 · 0 评论 -
【LeetCode】59. 螺旋矩阵 II
59. 螺旋矩阵 II1.题目描述2.解题思路3.代码1.题目描述给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。2.解题思路思路:分为四个赋值过程从左到右 l_r从上到下 u_d从右到左 r_l从下到上 d_ux记录每一圈的左右,上下边界y记录每一圈的右左,下上边界x,y随着圈的缩小,相应变化,x–,y++,最后考虑n为奇的情况x==y,为arr[x][y]赋值nnn为偶的不用考虑。**3.代码原创 2022-03-04 20:42:14 · 279 阅读 · 0 评论 -
【Leetcode】76. 最小覆盖子串
滑动窗口+哈希表原创 2022-03-03 16:06:41 · 123 阅读 · 0 评论 -
904. 水果成篮
904. 水果成篮题目描述解题思路代码题目描述你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:1,你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。2,你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果原创 2022-03-03 09:55:58 · 301 阅读 · 0 评论 -
118. 杨辉三角
118. 杨辉三角题目描述解题思路代码题目描述解题思路解法一:数学思路:分两层,最外层的列表ret和列表内元素(也是列表)row。然后,对于杨辉三角的每一行,两边均为1(j0 || j1),中间的元素,利用上一行对应两个元素之和(ret.get(i-1).get(j-1)+ret.get(i-1.get(j)))。最后,再将每一行添加到ret中。时间复杂度:O(numRows^2)。空间复杂度:O(1)。不考虑返回值的空间占用代码 public static List<List<原创 2022-01-25 23:24:32 · 276 阅读 · 0 评论 -
2. 合并两个有序数组
2.合并两个有序数组题目描述解题思路代码题目描述给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。原创 2022-01-23 14:37:20 · 1214 阅读 · 0 评论 -
1. 两数之和(LeetCode题目)
1.两数之和题目描述解题思路代码题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。解题思路思路一:暴力求解。依次判断数组中每两个元素之和与target的大小关系,即可得到相等的两个元素的下标,并返回。时间复杂度:O(N^2)空间复杂度:O(l)思路二:哈希表。利用哈希表的特殊性原创 2022-01-22 22:00:14 · 436 阅读 · 0 评论 -
leetCode-链表的中间结点
LeetCode-链表的中间结点题目描述:给定一个头结点为 head 的非空单链表,返回链表的中间结点如果有两个中间结点,则返回第二个中间结点。思路:方法一:java快慢指针class Solution { public ListNode middleNode(ListNode head) { ListNode p = head, q = head; while (q != null && q.next != null) {原创 2021-10-24 15:45:32 · 2241 阅读 · 0 评论 -
习题3.13 双端队列 (25分)
习题3.13 双端队列 (25分)1.题目双端队列(deque,即double-ended queue的缩写)是一种具有队列和栈性质的数据结构,即可以(也只能)在线性表的两端进行插入和删除。若以顺序存储方式实现双端队列,请编写例程实现下列操作:Push(X,D):将元素X插入到双端队列D的头;Pop(D):删除双端队列D的头元素,并返回;Inject(X,D):将元素X插入到双端队列D的尾部;Eject(D):删除双端队列D的尾部元素,并返回。函数接口定义:bool Push( Eleme原创 2021-01-26 11:26:00 · 424 阅读 · 0 评论 -
习题3.12 另类循环队列 (20分)
习题3.13 双端队列 (25分)1.题目要求双端队列(deque,即double-ended queue的缩写)是一种具有队列和栈性质的数据结构,即可以(也只能)在线性表的两端进行插入和删除。若以顺序存储方式实现双端队列,请编写例程实现下列操作:1.Push(X,D):将元素X插入到双端队列D的头;2.Pop(D):删除双端队列D的头元素,并返回;3.Inject(X,D):将元素X插入到双端队列D的尾部;4. Eject(D):删除双端队列D的尾部元素,并返回。2.理解实现循环队列队原创 2021-01-25 17:57:45 · 703 阅读 · 2 评论