力扣算法
吴俊荣
我是一个非常非常懒的人
展开
-
力扣(LeetCode)算法_C++——稀疏矩阵的乘法
给定两个 稀疏矩阵 :大小为 m x k 的稀疏矩阵 mat1 和大小为 k x n 的稀疏矩阵 mat2 ,返回 mat1 x mat2 的结果。你可以假设乘法总是可能的。输入:mat1 = [[1,0,0],[-1,0,3]], mat2 = [[7,0,0],[0,0,0],[0,0,1]]输入:mat1 = [[0]], mat2 = [[0]]输出:[[7,0,0],[-7,0,3]]原创 2023-09-06 22:06:21 · 561 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——寻找重复的子树
输入:root = [1,2,3,4,null,2,4,null,null,4]如果两棵树具有 相同的结构 和 相同的结点值 ,则认为二者是 重复 的。对于同一类的重复子树,你只需要返回其中任意 一棵 的根结点即可。输入:root = [2,2,2,3,null,3,null]给你一棵二叉树的根节点 root ,返回所有 重复的子树。输入:root = [2,1,1]输出:[[2,4],[4]]输出:[[2,3],[3]]原创 2023-09-06 22:03:39 · 540 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——有效的数独
解释:除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。只需要根据以上规则,验证已经填入的数字是否有效即可。一个有效的数独(部分已被填充)不一定是可解的。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。原创 2023-09-06 21:59:15 · 926 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——移位字符串分组
给定一个字符串,对该字符串可以进行 “移位” 的操作,也就是将字符串中每个字母都变为其在字母表中后续的字母,比如:“abc” -> “bcd”。解释:可以认为字母表首尾相接,所以 ‘z’ 的后续为 ‘a’,所以 [“az”,“ba”] 也满足 “移位” 操作规律。输入:[“abc”, “bcd”, “acef”, “xyz”, “az”, “ba”, “a”, “z”]给定一个包含仅小写字母字符串的列表,将该列表中所有满足 “移位” 操作规律的组合进行分组并返回。原创 2023-09-06 21:55:53 · 488 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——字母异位词分组
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。输入: strs = [“a”]输入: strs = [“”]输出: [[“a”]]输出: [[“”]]原创 2023-09-06 21:53:35 · 782 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——至多包含两个不同字符的最长子串
给你一个字符串 s ,请你找出 至多 包含 两个不同字符 的最长子串,并返回该子串的长度。解释:满足题目要求的子串是 “aabbb” ,长度为 5。解释:满足题目要求的子串是 “ece” ,长度为 3。输入:s = “ccaabbb”输入:s = “eceba”原创 2023-09-06 21:40:05 · 468 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——最大连续 1 的个数 III
给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数。输入:nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3。解释:[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]输入:nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2。粗体数字从 0 翻转到 1,最长的子数组长度为 10。解释:[1,1,1,0,0,1,1,1,1,1,1]原创 2023-09-06 21:38:35 · 512 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——替换后的最长重复字符
给你一个字符串 s 和一个整数 k。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。将中间的一个’A’替换为’B’,字符串变为 “AABBBBA”。在执行上述操作后,返回包含相同字母的最长子字符串的长度。子串 “BBBB” 有最长重复字母, 答案为 4。解释:用两个’A’替换为两个’B’,反之亦然。输入:s = “AABABBA”, k = 1。输入:s = “ABAB”, k = 2。可能存在其他的方法来得到同样的结果。原创 2023-09-06 21:35:31 · 602 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——存在重复元素 II
给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k。如果存在,返回 true;否则,返回 false。输入:nums = [1,2,3,1,2,3], k = 2。输入:nums = [1,2,3,1], k = 3。输入:nums = [1,0,1,1], k = 1。原创 2023-09-06 21:33:00 · 527 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——两个列表的最小索引总和
输入: list1 = [“Shogun”, “Tapioca Express”, “Burger King”, “KFC”],list2 = [“Piatti”, “The Grill at Torrey Pines”, “Hungry Hunter Steakhouse”, “Shogun”]输入:list1 = [“Shogun”, “Tapioca Express”, “Burger King”, “KFC”],list2 = [“KFC”, “Shogun”, “Burger King”]原创 2023-09-06 21:07:40 · 399 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——同构字符串
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。输入:s = “paper”, t = “title”给定两个字符串 s 和 t ,判断它们是否是同构的。输入:s = “egg”, t = “add”输入:s = “foo”, t = “bar”原创 2023-09-06 21:05:01 · 482 阅读 · 0 评论 -
力扣(LeetCode)算法_C++—— 快乐数
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 n 是 快乐数 就返回 true;不是,则返回 false。对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。如果这个过程 结果为 1,那么这个数就是快乐数。编写一个算法来判断一个数 n 是不是快乐数。原创 2023-09-06 20:50:09 · 976 阅读 · 0 评论 -
力扣(LeetCode)算法_C++—— 两个数组的交集
给定两个数组 nums1 和 nums2 ,返回 它们的交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序。输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输入:nums1 = [1,2,2,1], nums2 = [2,2]解释:[4,9] 也是可通过的。原创 2023-09-06 20:33:59 · 1260 阅读 · 0 评论 -
力扣(LeetCode)算法_C++—— 只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。输入:nums = [4,1,2,1,2]输入:nums = [2,2,1]输入:nums = [1]原创 2023-09-06 20:29:46 · 597 阅读 · 0 评论 -
力扣(LeetCode)算法_C++—— 存在重复元素
给你一个整数数组 nums。如果任一值在数组中出现 至少两次 ,返回 true;如果数组中每个元素互不相同,返回 false。输入:nums = [1,1,1,3,3,4,3,2,4,2]输入:nums = [1,2,3,1]输入:nums = [1,2,3,4]原创 2023-09-06 20:25:58 · 646 阅读 · 0 评论 -
力扣(LeetCode)算法_C++—— 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是原创 2021-03-12 17:57:37 · 225 阅读 · 0 评论 -
力扣(LeetCode)算法_C++—— 两数相加
示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输出:[8,9,9,9,0,0,0,1]提示:每个链表中的节点数在范围 [1, 100] 内0 <= Node.val <= 9题目数据保证列表表示的数字不含前导零struct ListNod原创 2021-03-10 17:59:59 · 446 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target = 6输出:[1,2]示例原创 2021-03-09 16:48:41 · 361 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0算法流程:初始化: 声明 left, right 双指针分别指向 numbers 数组左右两端;循环二分: 设 mid = (left + right) / 2为每次二分的中点( “原创 2021-03-09 15:08:10 · 280 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1提示:0 <= n <= 100解:本题的原理就是动态规划斐波那契数列int numWays(int n) { int a = 1, b = 1, sum; for原创 2021-03-09 13:43:32 · 330 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出:5提示:原创 2021-03-09 13:37:51 · 422 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“appendTail”,“ap原创 2021-03-04 09:44:27 · 225 阅读 · 1 评论 -
力扣(LeetCode)算法_C++——重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:限制:0 <= 节点个数 <= 5000class ListNode{public: int val; ListNode* next; ListNode(int x) { val = x; next = null原创 2021-03-03 14:45:13 · 209 阅读 · 1 评论 -
力扣(LeetCode)算法_C++——替从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000class ListNode{public: int val; ListNode* next; ListNode(int x) { val = x; next = nullptr; }};int* reversePrint(ListNode* head){ stack<Lis原创 2021-03-02 11:40:21 · 115 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000string replaceSpace(string s){ int length = s.length(); char* array = new char[length*3]; int size = 0; for (int i = 0; i < length; i++原创 2021-03-02 10:03:55 · 142 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000int findRepeatNumber1(vector<int>& nums) { unordered_map<int, int>原创 2021-03-01 18:00:35 · 229 阅读 · 0 评论 -
力扣(LeetCode)算法_C++——二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定 ta原创 2021-03-01 17:49:41 · 202 阅读 · 0 评论