算法
文章平均质量分 82
CodAlun
学最好的别人,做最好的自己!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode-43-字符串相乘
字符串相乘转载 2022-06-21 16:02:50 · 925 阅读 · 0 评论 -
LeetCode-42-接雨水
接雨水原创 2022-06-18 16:47:06 · 360 阅读 · 0 评论 -
LeetCode-41-缺失的第一个正数
缺失的第一个正数原创 2022-06-15 18:10:57 · 231 阅读 · 0 评论 -
LeetCode-40-组合总和 II
组合总和 II原创 2022-06-14 21:40:01 · 198 阅读 · 0 评论 -
LeetCode-39 - 组合总和
组合总和原创 2022-06-09 21:32:14 · 1134 阅读 · 0 评论 -
LeetCode-38 - 外观数列
外观数列原创 2022-06-07 16:05:43 · 250 阅读 · 0 评论 -
LeetCode-37 - 解数独
解数独转载 2022-06-02 17:51:34 · 444 阅读 · 0 评论 -
LeetCode-36 - 有效的数独
来源:LeetCode.36. 有效的数独原创 2022-06-01 10:47:22 · 299 阅读 · 0 评论 -
LeetCode-35 - 搜索插入位置
题目来源:LeetCode.给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:输入: nums = [1,3,5,6], target = 7输出: 4提示:1<=n原创 2022-05-31 15:46:01 · 208 阅读 · 0 评论 -
LeetCode-34 - 在排序数组中查找元素的第一个和最后一个位置
题目来源:LeetCode.给定一个按照升序排列的整数数组 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,-1]示例 3:输入:nums = [], ta原创 2022-05-31 11:43:46 · 183 阅读 · 0 评论 -
LeetCode-33 - 搜索旋转排序数组
题目来源:LeetCode.整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给转载 2022-02-11 17:53:53 · 264 阅读 · 0 评论 -
LeetCode-32 - 最长有效括号
题目来源:LeetCode.给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = "(()"输出:2解释:最长有效括号子串是 "()"示例 2:输入:s = ")()())"输出:4解释:最长有效括号子串是 "()()"示例 3:输入:s = ""输出:0提示:0<=s.length<=3∗1040 <= s.length <= 3 * 10^40<=s.length<=转载 2022-02-10 21:22:49 · 823 阅读 · 0 评论 -
LeetCode-31-下一个排列
题目来源:LeetCode.整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个 排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即转载 2022-02-09 11:13:26 · 235 阅读 · 0 评论 -
LeetCode-30-串联所有单词的子串
题目来源:LeetCode.给定一个字符串 s 和一些 长度相同 的单词 words 。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑 words 中单词串联的顺序。示例 1:输入:s = "barfoothefoobarman", words = ["foo","bar"]输出:[0,9]解释:从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。输出的顺原创 2022-02-08 21:22:43 · 1146 阅读 · 1 评论 -
LeetCode-29-两数相除
题目来源:LeetCode.给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2说明:当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义原创 2022-02-08 14:23:28 · 726 阅读 · 0 评论 -
位运算实现快速乘
快速乘: 避免使用乘法,通过位运算来实现乘法;实现快速乘的思路:计算A*B:方法为:对乘数进行拆分,如果是B是偶数(与1做&运算法,结果是0),就让A左移一位(乘2),然后B右移一位(除2);若果B是奇数(与1做&运算法,结果非0),就让结果集加上一个A(等价于让B-1),然后继续进行拆分,循环截止的条件是B为0。通过公式来表示:A∗B={(A<<1)∗(B>>1),B为偶数(A<<1)∗(B>>1)+A,B为奇数A*B =\beg原创 2022-02-08 10:31:26 · 605 阅读 · 0 评论 -
LeetCode-28-实现 strStr()
char[] p = ps.toCharArray();int[] next = new int[p.length];next[0] = -1;int j = 0;int k = -1;while (j < p.length - 1) {if (k == -1 || p[j] == p[k]) {if (p[++j] == p[++k]) { // 当两个字符相等时要跳过} else {next[j] = k;}} else {k = next[k];}}return n原创 2022-02-07 10:21:37 · 175 阅读 · 0 评论 -
LeetCode-27-移除元素
题目来源:LeetCode.给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面转载 2021-10-22 15:20:24 · 147 阅读 · 0 评论 -
LeetCode-26-删除有序数组中的重复项
题目来源:LeetCode.给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。示例 2:输入:nums = [0,0,1,1转载 2021-10-22 11:32:35 · 506 阅读 · 0 评论 -
LeetCode-25-K 个一组翻转链表
题目来源:LeetCode.给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]示例 2:输入:head = [1,2,3,4,5], k = 3输出:[3,2,1,4,5]示例 3:输入:head = [1,2,3,4,5], k = 1输出:[1,2,3,原创 2021-10-21 16:45:51 · 167 阅读 · 0 评论 -
LeetCode-24-两两交换链表中的节点
题目来源:LeetCode.给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:链表中节点的数目在范围 [0,100][0, 100][0,100] 内0<=Node.val<=1000 <= Node.val &l原创 2021-10-20 16:46:25 · 164 阅读 · 0 评论 -
LeetCode-23-合并K个升序链表
题目来源:LeetCode.给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:原创 2021-10-19 18:14:00 · 323 阅读 · 0 评论 -
LeetCode-22-括号生成
题目来源:LeetCode.数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1<=n<=81 <= n <= 81<=n<=8接下来看一下解题思路:思路:回溯:原创 2021-10-18 20:41:17 · 557 阅读 · 0 评论 -
LeetCode-20-有效的括号
题目来源:LeetCode.给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:tr转载 2021-10-15 11:10:57 · 293 阅读 · 0 评论 -
LeetCode-18-四数之和
题目来源:LeetCode.给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] :示例 1:输入:nums = [1,0,-1,0,-2,2], target = 0输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]示例 2:输入:nums = [2,2,2,2,2], target = 8输出:[[2,2,2,2]原创 2021-10-13 15:10:42 · 169 阅读 · 0 评论 -
LeetCode-17-电话号码的字母组合
题目来源:LeetCode.给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"]提示:0<=d原创 2021-10-13 10:46:28 · 164 阅读 · 0 评论 -
LeetCode-16-最接近的三数之和
题目来源:LeetCode.给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例 1:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2)提示:3<=nums.length<=1033 <= nums.length <= 10^3原创 2021-10-12 16:03:51 · 159 阅读 · 0 评论 -
LeetCode-15-三数之和
题目来源:LeetCode.给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <= nums.leng转载 2021-10-12 13:53:46 · 195 阅读 · 0 评论 -
LeetCode-14-最长公共前缀
题目来源:LeetCode.编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。提示:1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写原创 2021-10-11 21:12:05 · 250 阅读 · 0 评论 -
LeetCode-13-罗马数字转整数
题目来源:LeetCode.罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字2 写做II,即为两个并列的1。12 写做 XII ,即为X + II。 27 写做 XXVII, 即为 XX + V +原创 2021-08-28 15:24:23 · 248 阅读 · 0 评论 -
LeetCode-12-整数转罗马数字
题目来源:LeetCode.罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字2 写做II,即为两个并列的1。12 写做 XII ,即为X + II。 27 写做 XXVII, 即为 XX + V +原创 2021-08-26 14:59:08 · 217 阅读 · 0 评论 -
LeetCode-11-盛最多水的容器
题目来源:LeetCode.给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2原创 2021-08-14 11:28:57 · 164 阅读 · 0 评论 -
LeetCode-10-正则表达式匹配
题目来源:LeetCode.给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = "aa" p = "a"输出:false解释:"a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa" p = "a*"输出:true解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素,转载 2021-08-02 15:25:48 · 269 阅读 · 0 评论 -
LeetCode-9-回文数
题目来源:LeetCode.给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。原创 2021-08-02 08:30:51 · 163 阅读 · 0 评论 -
LeetCode-8-字符串转换整数
题目来源:LeetCode.请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:1. 读入字符串并丢弃无用的前导空格2. 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。3. 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。转载 2021-07-31 17:16:49 · 183 阅读 · 0 评论 -
LeetCode-7-整数反转
题目来源:LeetCode.给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0 提示:-231 <= x <=转载 2021-07-31 11:40:36 · 182 阅读 · 0 评论 -
LeetCode-6- Z 字形变换
题目来源:LeetCode.将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRow原创 2021-07-30 14:48:30 · 201 阅读 · 0 评论 -
LeetCode-5-最长回文子串
题目来源:LeetCode.给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"示例 3:输入:s = "a"输出:"a"示例 4:输入:s = "ac"输出:"a"接下来看一下解题思路:思路一(暴力求解): 首先采用双指针法; 定位一个指针,用另一个指针遍历字符串; 每遍历一个判断是否是回文字符串,如原创 2021-07-29 20:30:21 · 164 阅读 · 0 评论 -
LeetCode-4-寻找两个正序数组的中位数
题目来源:LeetCode.给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 看到这个问题我首先想到的方法就是将两个有序数组合并,然后找中位数。接下来看一下解题思路:思路一(归并求解): 首先将两个有序数组按序合并存放在一个数组里 然后查找中位数,若有奇数个数据,直接返回中间的数据, 若有偶数个数据,返回中间两个数的平均数代码示例:public double findMedianSo原创 2021-04-06 00:09:45 · 423 阅读 · 0 评论 -
LeetCode-1-两数之和
题目来源:LeetCode.给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。 看到这个问题我首先想到的方法就是暴力题解,枚举出所有的结果。接下来看一下解题思路:思路一(暴力求解): 用双层for循环遍历数组,判断两个数加起来是否等于target,如果等于返回对应的下标。代码示例:pu原创 2021-04-03 23:02:29 · 135 阅读 · 0 评论
分享