
算法题
文章平均质量分 59
iheanu_
有人在吗 ?
展开
-
LeetCode回溯算法篇【216. 组合总和 III】
力扣题目链接(opens new window)找出所有相加之和为n 的k个数的组合。组合中只允许含有 1 -9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。 解集不能包含重复的组合。示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]]示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]正解回溯暴力求解class Solution { List<Li...原创 2021-12-06 16:20:58 · 292 阅读 · 0 评论 -
【蓝桥杯篇】分巧克力
题目描述儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有NN块巧克力,其中第ii块是H_i \times WiHi×Wi的方格组成的长方形。为了公平起见,小明需要从这NN块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足: 形状是正方形,边长是整数; 大小相同; 例如一块 6x5 的巧克力可以切出 6 块 2x2 的巧克力或者 2 块 3x3 的巧克力。当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计...原创 2021-11-26 11:39:55 · 554 阅读 · 1 评论 -
【蓝桥杯篇】2020蓝桥杯省赛练习
第一题: 解密(5分)题目描述小明设计了一种文章加密的方法:对于每个字母 c,将它变成某个另外的字符 Tc。下表给出了字符变换的规则:例如,将字符串 YeRi 加密可得字符串 EaFn。小明有一个随机的字符串,加密后为EaFnjISplhFviDhwFbEjRjfIBBkRyY由 30 个大小写英文字母组成,不包含换行符),请问原字符串是多少?(如果你把以上字符串和表格复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 str.txt,第一行为上面的字符串,后面原创 2021-11-25 22:02:45 · 1041 阅读 · 0 评论 -
【蓝桥杯篇】数字三角形
原题呈现题目描述上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。输入描述输入的第一行包含一个整数N\ (1 \leq N \leq 100)N(1≤N≤100),表示三角形的行数。下面的NN行给出数字三角形。数字三角形上的数都是 0 至 100 之间...原创 2021-11-21 22:32:45 · 2408 阅读 · 3 评论 -
二叉树层序历遍合集
637.二叉树的层平均值力扣题目链接class Solution { private List<Double> list = new ArrayList<>(); public List<Double> averageOfLevels(TreeNode root) { DFS(root); return list; } void DFS(TreeNode node) {原创 2021-11-15 21:35:38 · 308 阅读 · 2 评论 -
LeetCode二叉树【199.二叉树的右视图】
力扣题目链接(opens new window)给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。正解1)可以利用二叉树的层序历遍,取每层的最后一个加入链表中,便可以得到二叉树的右视图/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right;.原创 2021-10-30 21:25:49 · 124 阅读 · 0 评论 -
LeetCode二叉树篇【102. 二叉树的层序遍历】
力扣题目链接(opens new window)给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。正解1、通过递归的方式,通过其deep-1和ResultList内List集合下标对应这点,将每层的节点值加入对应的List集合中class Solution { private List<List<Integer>> resList = new ArrayList<List<Integer>.原创 2021-10-30 19:36:15 · 110 阅读 · 0 评论 -
LeetCode二叉树篇【二叉树的迭代历遍】
相关题目链接上篇讲述了二叉树的递归历遍,本篇讲述二叉树的迭代历遍对于递归和迭代的异同:他们都是对一段代码功能的重复利用来实现功能,但递归是封装为一个函数的形式,而迭代是直接在代码块中1.前序历遍动画如下:这里通过一个栈来实现二叉树的历遍,由于栈的先进后出属性,我在加入左右子节点要先右后左才能保证取出的顺序满足前序历遍// 前序遍历顺序:中-左-右,入栈顺序:中-右-左class Solution { public List<Integer> preord.原创 2021-10-15 16:11:17 · 131 阅读 · 0 评论 -
LeetCode二叉树篇【二叉树的递归历遍】
二叉树的前序历遍 二叉树的后序历遍 二叉树的中序历遍概念介绍二叉树主要有两种遍历方式:深度优先遍历:先往深走,遇到叶子节点再往回走。 广度优先遍历:一层一层的去遍历。这两种遍历是图论中最基本的两种遍历方式,后面在介绍图论的时候 还会介绍到。那么从深度优先遍历和广度优先遍历进一步拓展,才有如下遍历方式:深度优先遍历 前序遍历(递归法,迭代法) 中序遍历(递归法,迭代法) 后序遍历(递归法,迭代法) 广度优先遍历 层次遍历(迭代法) 在深度优先遍历中:有三个顺序,原创 2021-10-13 19:38:27 · 128 阅读 · 0 评论 -
LeetCode栈与队列篇【347. 前 K 个高频元素】
力扣题目链接(opens new window)给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2]示例 2:输入: nums = [1], k = 1 输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。 题目数据保证答案唯一,换句话说,数组中前 k 个高原创 2021-10-12 17:12:36 · 116 阅读 · 0 评论 -
LeetCode栈与队列篇【239. 滑动窗口最大值】
力扣题目链接(opens new window)给定一个数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?正解本题主要内容就是求一个区域内的最大值,但受时间的约束,(O^2)的时间复杂度也无法通过;此时就需要我们转变思路,题目的名称叫做滑动窗口,因此我们需要用一种动态的方式实时的更新可能的最大值,缩减时间复杂度。运...原创 2021-10-11 19:43:12 · 94 阅读 · 0 评论 -
LeetCode栈与队列篇【150. 逆波兰表达式求值】
力扣题目链接(opens new window)根据 逆波兰表示法,求表达式的值。有效的运算符包括+ , - , * , /。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入: ["2", "1", "+", "3", " * "] 输出: 9 解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例2:...原创 2021-10-10 18:44:21 · 85 阅读 · 0 评论 -
LeetCode栈与队列篇【1047. 删除字符串中的所有相邻重复项】
力扣题目链接(opens new window)给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:"abbaca" 输出:"ca" 解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操.原创 2021-10-09 12:11:37 · 103 阅读 · 0 评论 -
LeetCode栈与队列篇【20. 有效的括号】
力扣题目链接(opens new window)给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。示例 1:输入: "()" 输出: true示例2:输入: "()[]{}" 输出: true正解1)可以把其想象为一个消消看问题,用一个栈容器去逐个存放括号,若对于括号相遇则消去class Solut..原创 2021-10-08 12:30:51 · 124 阅读 · 0 评论 -
LeetCode栈与队列篇【225. 用队列实现栈】
力扣题目链接(opens new window)使用队列实现栈的下列操作:push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是push to back, peek/pop from front, size, 和is empty这些操作是合法的。 你所使用的语言也许不支持队列。你可以使用 list 或者 deque(双端队列)来模拟一个队列, 只要是标...原创 2021-10-07 17:51:53 · 84 阅读 · 0 评论 -
LeetCode字符串篇【459.重复的子字符串】
力扣题目链接(opens new window)给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。示例 1:输入: "abab"输出: True解释: 可由子字符串 "ab" 重复两次构成。示例 2:输入: "aba"输出: False示例 3:输入: "abcabcabcabc"输出: True解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)正原创 2021-10-05 21:29:18 · 156 阅读 · 0 评论 -
LeetCode字符串篇【28. 实现 strStr()】
力扣题目链接(opens new window)实现strStr()函数。给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2示例 2: 输入: haystack = "aaaaa", needle = "bba" 输出: -1说明: 当needle是空字符...原创 2021-10-05 20:39:06 · 76 阅读 · 0 评论 -
LeetCode字符串篇【剑指Offer58-II.左旋转字符串】
力扣题目链接(opens new window)字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = "abcdefg", k = 2输出:"cdefgab"示例 2:输入: s = "lrloseumgh", k = 6输出:"umghlrlose"限制:1 <= k < s.le..原创 2021-10-03 19:20:00 · 168 阅读 · 0 评论 -
LeetCode字符串篇【翻转字符串里的单词】
力扣题目链接(opens new window)给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good example"输出:"example good a"解释: 如果两个单词间有多余的空...原创 2021-10-02 13:10:35 · 184 阅读 · 1 评论 -
LeetCode字符串篇【剑指Offer 05.替换空格】
目录题目:剑指Offer 05.替换空格正解:1)比较方便的思路就是用String的replace或replaceAll方法关于String的replace和replaceAll方法:2)数组扩容+双指针题目:剑指Offer 05.替换空格力扣题目链接(opens new window)请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1: 输入:s = "We are happy."输出:"We%20are%20happy."正解:1.原创 2021-10-01 17:40:07 · 184 阅读 · 1 评论 -
LeetCode字符串篇【反转字符串Ⅱ】
力扣题目链接(opens new window)给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。示例:输入: s = "abcdefg", k = 2输出: "bacdfeg"正解简单的一个模拟,定义好不同情况下字符串所要进行的操作即可class Solution { p原创 2021-09-30 12:07:22 · 157 阅读 · 1 评论 -
LeetCode字符串篇【反转字符串】
力扣题目链接(opens new window)编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:["H","a","n","n","a","h"]输出:["原创 2021-09-29 11:52:00 · 103 阅读 · 0 评论 -
LeetCode哈希表篇【四数之和】
力扣题目链接(opens new window)题意:给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1...原创 2021-09-28 11:54:27 · 90 阅读 · 0 评论 -
LeetCode哈希表篇【三数之和】
力扣题目链接(opens new window)给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]#思路一个数组,从中找三个数使其和为0;那么基本思路就是将其排序,从两头找...原创 2021-09-27 16:00:07 · 197 阅读 · 0 评论 -
LeetCode哈希表篇【赎金信】
力扣题目链接(opens new window)给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)注意:你可以假设两个字符串均只含有小写字母。canConstruct("a", "b原创 2021-09-24 16:37:53 · 156 阅读 · 0 评论 -
LeetCode哈希表篇【四数相加Ⅱ】
力扣题目链接(opens new window)给定四个包含整数的数组列表A , B , C , D ,计算有多少个元组 (i, j, k, l),使得A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度N,且 0 ≤ N ≤ 500 。所有整数的范围在 -2^28 到 2^28 - 1 之间,最终结果不会超过2^31 - 1 。例如:输入: A = [ 1, 2] B = [-2,-1] C = [-1, 2]...原创 2021-09-24 11:49:17 · 113 阅读 · 0 评论 -
LeetCode哈希表篇【两数之和】
力扣题目链接(opens new window)给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]提示:2 <= nums.length <= 104-10...原创 2021-09-23 09:53:12 · 234 阅读 · 0 评论 -
LeetCode哈希表篇【快乐数】
力扣题目链接(opens new window)编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:1^2 + 9^2 = 828^2 + 2^2 = 686^2 + 8^2 = 1001.原创 2021-09-22 11:20:16 · 122 阅读 · 0 评论 -
LeetCode哈希表篇【两个数组的交集】
力扣题目链接(opens new window)题意:给定两个数组,编写一个函数来计算它们的交集。说明:输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。正解一个简单的找交集问题,借用set的不重复性,统计两个数值中唯一出现的值,最后求交集。class Solution { public int[] intersection(int[] nums1, int[] nums2) { HashSet<Integer> s..原创 2021-09-21 15:39:04 · 184 阅读 · 0 评论 -
LeetCode哈希表篇【有效的字母异位词】
力扣题目链接(opens new window)给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例1: 输入: s = "anagram", t = "nagaram" 输出: true示例 2: 输入: s = "rat", t = "car" 输出: false说明:你可以假设字符串只包含小写字母。正解1)Set存出现过的char,HashMap用来统计出现的个数class Solution { public static ..原创 2021-09-20 17:17:25 · 141 阅读 · 0 评论 -
LeetCode链表篇【环形链表Ⅱ】
力扣题目链接(opens new window)题意: 给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。正解1)历遍找循环点/** * Definition for singly-linked list. * class ListNode { * int val;...原创 2021-09-19 15:07:19 · 116 阅读 · 0 评论 -
LeetCode链表篇【面试题 02.07. 链表相交】
力扣题目链接(opens new window)给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。示例 1:输入:listA = [4,1,8,4,5], listB = [5,0,1,8,4,5]输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表.原创 2021-09-18 20:52:24 · 255 阅读 · 0 评论 -
LeetCode链表篇【删除链表的倒数】
力扣题目链接(opens new window)给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例 1:输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2:输入:head = [1], n = 1 输出:[] 示例 3:输入:head = [1,2], n = 1 输出:[1]正解1)两次历遍:先手历遍一次获得size大小,在结合倒数n,算出目标节点的下标,之后进行删除节.原创 2021-09-17 22:28:18 · 196 阅读 · 0 评论 -
LeetCode链表篇【两两交换链表中的节点】
力扣题目链接(opens new window)给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。正解1)第一种方法:交换链表节点的元素 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * Li.原创 2021-09-16 23:01:02 · 187 阅读 · 0 评论 -
LeetCode链表篇【反转链表】
206.反转链表力扣题目链接(opens new window)题意:反转一个单链表。示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL正解:如果再定义一个新的链表,实现链表元素的反转,其实这是对内存空间的浪费。其实只需要改变链表的next指针的指向,直接将链表反转 ,而不用重新定义一个新的链表,如图所示:之前链表的头节点是元素1, 反转之后头结点就是元素5 ,原创 2021-09-16 11:13:09 · 109 阅读 · 0 评论 -
LeetCode链表篇【设计链表】
707.设计链表力扣题目链接(opens new window)题意:在链表类中实现这些功能:get(index):获取链表中第index个节点的值。如果索引无效,则返回-1。 addAtHead(val):在链表的第一个元素之前添加一个值为val的节点。插入后,新节点将成为链表的第一个节点。 addAtTail(val):将值为val 的节点追加到链表的最后一个元素。 addAtIndex(index,val):在链表中的第index个节点之前添加值为val 的节点...原创 2021-09-15 15:30:41 · 94 阅读 · 0 评论 -
LeetCode链表篇【移除链表元素】
203.移除链表元素力扣题目链接(opens new window)给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]提示:列表中的节点数目在范围[0, 104]内 1 <= Node.va...原创 2021-09-14 10:22:33 · 114 阅读 · 0 评论 -
LeetCode数组篇【螺旋矩阵Ⅱ】
59.螺旋矩阵II力扣题目链接(opens new window)给定一个正整数n,生成一个包含 1 到n2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]提示:1 <= n <= 20正解:该题关键在于判断顺时针移动时方向的变换,可以设置四个布尔类型,来作为判断的依据,然后就是1-n*n数字的历遍class Solution { ...原创 2021-09-13 10:24:08 · 118 阅读 · 0 评论 -
LeetCode数组篇【长度最小的子数组】
209.长度最小的子数组力扣题目链接(opens new window)给定一个含有n个正整数的数组和一个正整数s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组[4,3]是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4]输出:1示例 3:输入:ta...原创 2021-09-12 18:13:56 · 127 阅读 · 0 评论 -
LeetCode数组篇【有序数组的平方】
977.有序数组的平方力扣题目链接(opens new window)给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]示例 2: 输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]提示:1原创 2021-09-12 12:13:38 · 182 阅读 · 0 评论