
LeetCode练习题
null_kk
学习记录 反思 debug
展开
-
LeetCode练习题115、205
115. 不同的子序列给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)题目数据保证答案符合 32 位带符号整数范围。示例 1:输入:S = “rabbbit”, T = “rabbit”输出:3解释:如下图所示, 有 3 种可以从 S 中得到 “rabbit” 的方案。(上箭头符号 ^原创 2020-08-18 22:19:52 · 169 阅读 · 0 评论 -
LeetCode练习题438、680
438. 找到字符串中所有字母异位词给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。示例 1:输入:s: “cbaebabacd” p: “abc”输出:[0, 6]解释:起始索引等于 0 的子串是 “cba”, 它是 “abc” 的字母异位词。起始索引等于 6 的子串是 “原创 2020-08-17 16:38:48 · 371 阅读 · 0 评论 -
LeetCode练习题151、557、917
151. 翻转字符串里的单词给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输出: “world! hello”解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: “a good example”输出: “example good a”解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少原创 2020-08-16 16:14:55 · 171 阅读 · 0 评论 -
LeetCode练习题14、344、541
14. 最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。最长公共前缀char * longestCommonPrefix(char ** strs, int strsSize){ if (strsS原创 2020-08-15 18:00:01 · 137 阅读 · 0 评论 -
LeetCode练习题709、58、771、387、8
709. 转换成小写字母实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。示例 1:输入: “Hello”输出: “hello”示例 2:输入: “here”输出: “here”示例 3:输入: “LOVELY”输出: “lovely”转换成小写字母char * toLowerCase(char * str){ int i = 0; while (str[i] != 0) {原创 2020-08-14 11:56:51 · 189 阅读 · 0 评论 -
LeetCode练习题1122
1122. 数组的相对排序给你两个数组,arr1 和 arr2,arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。示例:输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]输出:[2,2,2,1,4,3,3,9,6,7,19]提示:arr1.length,原创 2020-08-12 22:42:54 · 337 阅读 · 0 评论 -
LeetCode练习题338
338. 比特位计数给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]比特位计数动态规划二进制中,奇数一定比前面那个偶数多一个 1。偶数中 1 的个数一定和除以 2 之后的那个数一样多。int* countBits(int num, int* returnSize){ *returnSize = nu原创 2020-08-06 01:01:27 · 168 阅读 · 0 评论 -
LeetCode练习题191、231、190
191. 位1的个数编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串 000000000000000000000000100000原创 2020-08-04 22:51:57 · 298 阅读 · 0 评论 -
LeetCode练习题647、5、9
647. 回文子串给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1:输入: “abc”输出: 3解释: 三个回文子串: “a”, “b”, “c”.示例 2:输入: “aaa”输出: 6说明: 6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”.注意:输入的字符串长度不会超过1000。回文子串动态规划dp[i][j]由dp[i+1][j-1]决定,原创 2020-08-03 13:12:16 · 147 阅读 · 0 评论 -
LeetCode练习题91、221
91. 解码方法一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入: “226”输出: 3解释: 它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。解码方法动态规划若s[i] = ‘0’原创 2020-07-29 22:25:46 · 146 阅读 · 0 评论 -
LeetCode练习题64、72
64. 最小路径和给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。最小路径和动态规划左边上边都是边界上边是边界左边是边界左边上边都不是边界int min(int a, int b) { if(a < b) {return a;} els原创 2020-07-28 21:45:00 · 224 阅读 · 0 评论 -
LeetCode练习题121、122、309、714、123
121. 买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股原创 2020-07-25 12:11:45 · 179 阅读 · 0 评论 -
LeetCode练习题198、213
198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入原创 2020-07-21 21:19:17 · 189 阅读 · 0 评论 -
LeetCode练习题1143、120
1143. 最长公共子序列给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。示例 1:输入:text1 = “abcde”,原创 2020-07-17 21:10:39 · 130 阅读 · 0 评论 -
LeetCode练习题62、63
62. 不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -> 向下向右 -> 向下 -> 向右向下 -> 向右 -> 向右示例 2:输入: m = 7原创 2020-07-16 22:45:16 · 332 阅读 · 0 评论 -
LeetCode练习题33、153
33. 搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。(暗含条件:用二分查找法)示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums =原创 2020-07-13 23:14:53 · 160 阅读 · 0 评论 -
LeetCode练习题69、367
69. x 的平方根实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。x的平方根方法一:二分法int mySqrt(int x){ if(x == 0 || x == 1) { return x; }原创 2020-07-12 20:53:52 · 156 阅读 · 0 评论 -
LeetCode练习题55、45
55. 跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。跳跃原创 2020-07-11 11:29:13 · 214 阅读 · 0 评论 -
LeetCode练习题806、455
860. 柠檬水找零在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。示例 1:输入:[5,5,5,10,20]输出:true解释:前 3 位顾客那里,我们按顺序收取 3 张 5 美原创 2020-07-08 21:57:06 · 201 阅读 · 1 评论 -
LeetCode练习题102
102. 二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]。二叉树的层序遍历BFS返回数组是一维数组,而分层遍历返回的是二维数组因此,需要计算每层的结点数#define MAXSIZE 1000int** levelOrde原创 2020-07-08 21:53:34 · 113 阅读 · 0 评论 -
LeetCode练习题53、152
53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。最大子序和方法一:暴力int maxSubArray(int* nums, int numsSize){ int max = INT_MIN; for(int i = 0; i < numsSize; i++) {原创 2020-07-05 19:52:00 · 153 阅读 · 0 评论 -
LeetCode练习题50、169
50. Pow(x, n)实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1] 。Pow(x,n)暴原创 2020-07-03 21:43:29 · 215 阅读 · 0 评论 -
LeetCode练习题236、938
236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] 3 / \ 5 1 / \ / \ 6 2 0原创 2020-06-29 20:44:20 · 173 阅读 · 0 评论 -
LeetCode练习题104、111
104. 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。二叉树的最大深度递归int maxDepth(struct TreeNode* root){ if(root == NULL) { return 0原创 2020-06-27 20:22:42 · 128 阅读 · 0 评论 -
LeetCode练习题226、98
226. 翻转二叉树翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1翻转二叉树struct TreeNode* invertTree(struct TreeNode* root){ if(root == NULL) { return NULL; } //终止条件 struct原创 2020-06-25 19:47:34 · 135 阅读 · 0 评论 -
LeetCode练习题22
22. 括号生成数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]括号生成递归void generate(int left, int right, int n, int *returnSize, char **res, char *s) { if(left == n && right == n)原创 2020-06-14 20:45:13 · 126 阅读 · 0 评论 -
LeetCode练习题94、144、590、589
94. 二叉树的中序遍历给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]1\2/3输出: [1,3,2]二叉树的中序遍历递归#define MAXSIZE 1000void inorder(struct TreeNode *root, int *returnSize, int *a) { if(!root) {return ;} inorder(root->left, returnSize, a); a[(*returnSiz原创 2020-06-08 22:03:05 · 164 阅读 · 0 评论 -
LeetCode练习题42、242
42. 接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6接雨水按列计算较矮列墙高度>当前列墙高度时,当前列有积水较矮列墙高度<当前列墙高度时,当前列无积水较矮列墙高度=当前列墙高度时,当前列无积水int tra原创 2020-06-05 20:50:09 · 160 阅读 · 0 评论 -
LeetCode练习题115、239
堆栈LIFO传统堆栈:push:把一个新值压入到堆栈的顶部。pop:把顶部元素从堆栈中移除,并且不返回这个值。top:返回顶部元素的值,但不进行移除。堆栈的实现:静态数组堆栈动态数组堆栈链式堆栈155. 最小栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:[“MinS原创 2020-05-31 18:57:26 · 178 阅读 · 0 评论 -
LeetCode练习题20、84
20. 有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true有效的括号栈原创 2020-05-27 14:33:47 · 170 阅读 · 0 评论 -
LeetCode练习题21、88、66
21. 合并两个有序链表将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4合并两个有序链表struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ if(l1 == NULL) { return l2;原创 2020-05-22 21:46:47 · 167 阅读 · 0 评论 -
LeetCode练习题26、189
26. 删除排序数组中的重复项给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度原创 2020-05-20 22:53:24 · 140 阅读 · 0 评论 -
LeetCode练习题141、142
141. 环形链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。环形链表//设置快慢指针//慢指针移动一步的同时快指针移动两步//如果有环,快慢指针就会相遇bool hasCycle(struct ListNode *head)原创 2020-05-18 21:21:15 · 198 阅读 · 0 评论 -
LeetCode练习题206、560、24
206. 反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL反转链表方法一:双指针迭代//双指针迭代法//每次迭代都将 cur 的 next 指向 pre// pre 和 cur 后移一位struct ListNode* reverseList(struct ListNode* head){ struct ListNode *pre = NULL;原创 2020-05-14 21:19:13 · 163 阅读 · 0 评论 -
LeetCode练习题1、15
1、两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum著作权归原创 2020-05-14 10:23:21 · 292 阅读 · 0 评论 -
LeetCode练习题11、70
11.盛最多水的容器给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能...原创 2020-02-14 00:02:30 · 262 阅读 · 0 评论 -
LeetCode练习题779、283
779.第K个语法符号在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)例子:输入: N = 1, K = 1输出: 0输入: N = 2, K = 1输出: 0输入: N = 2, K = 2输出: 1输入: N = 4, K = 5输出: 1解释:第一行: 0第二行...原创 2020-02-06 00:51:50 · 996 阅读 · 0 评论 -
LeetCode练习题509、1137、125
509.斐波那契数斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定 N,计算 F(N)。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + ...原创 2020-02-02 23:41:38 · 2047 阅读 · 0 评论 -
LeetCode练习题122、392
贪心算法122.买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格...原创 2020-02-01 09:23:47 · 122 阅读 · 0 评论