一天一道算法题
在bug上写代码
这个作者很懒,什么都没留下…
展开
-
leetcode-每日一道算法题
反转字符串 II 给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。 如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。 示例 1: 输入:s = “abcdefg”, k = 2 输出:“bacdfeg” 示例 2: 输入:s = “abcd”, k = 2 输出:“bacd” 提示: 1 <= s.length <= 104 s 仅由小写英文组成 1 <= .原创 2021-08-20 22:00:00 · 50 阅读 · 0 评论 -
leetcode-每日一道算法题
反转字符串中的元音字母 给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。 元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现。 示例 1: 输入:s = “hello” 输出:“holle” 示例 2: 输入:s = “leetcode” 输出:“leotcede” 提示: 1 <= s.length <= 3 * 105 s 由 可打印的 ASCII 字符组成 代码: class Solution { private Map<.原创 2021-08-19 20:12:17 · 56 阅读 · 0 评论 -
leetcode-每日一道算法题
移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 代码: class Solution { public int removeElement(int[] nums, int val) { //数组末尾且值不等于val的索引 int index =.原创 2021-08-18 22:09:27 · 44 阅读 · 0 评论 -
leetcode-每日一道算法题
删除有序数组中的重复项 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 int len = remove.转载 2021-08-17 21:07:44 · 60 阅读 · 0 评论 -
leetcode-每日一道算法题
学生出勤记录 I 给你一个字符串 s 表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符: ‘A’:Absent,缺勤 ‘L’:Late,迟到 ‘P’:Present,到场 如果学生能够 同时 满足下面两个条件,则可以获得出勤奖励: 按 总出勤 计,学生缺勤(‘A’)严格 少于两天。 学生 不会 存在 连续 3 天或 3 天以上的迟到(‘L’)记录。 如果学生可以获得出勤奖励,返回 true ;否则,返回 false 。 示例 1: 输入:s = “.原创 2021-08-17 09:16:08 · 192 阅读 · 0 评论 -
leetcode-每日一道算法题
两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 提示: 链表中节点的数目在范围 [0, 100] 内 0 <= Node.val <= 100 代码: class Solution { public List.原创 2021-08-15 19:23:49 · 65 阅读 · 0 评论 -
leetcode-每日一道算法题
合并K个升序链表 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 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: 输入:lists = [.原创 2021-08-15 14:43:48 · 72 阅读 · 0 评论 -
leetcode-每日一道算法题
括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"] 示例 2: 输入:n = 1 输出:["()"] 提示: 1 <= n <= 8 代码: class Solution { public List<String> generateParenthesis(int n) { /.原创 2021-08-14 17:33:17 · 78 阅读 · 0 评论 -
leetcode-每日一道算法题
合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [], l2 = [0] 输出:[0] 提示: 两个链表的节点数目范围是 [0, 50] -100 <= Node.val <= 100 l1 和 l2 均按 非递减顺序 排列 代码.原创 2021-08-13 10:02:02 · 47 阅读 · 0 评论 -
leetcode-每日一道算法题
有效的括号 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 示例 1: 输入:s = “()” 输出:true 示例 2: 输入:s = “()[]{}” 输出:true 示例 3: 输入:s = “(]” 输出:false 示例 4: 输入:s = “([)]” 输出:false 示例 5: 输入:s = “{[]}” 输出:true 提示: 1 <= s..原创 2021-08-12 22:02:54 · 79 阅读 · 0 评论 -
leetcode-每日一道算法题
删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第 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] 提示: 链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <= 100 1 <.原创 2021-08-11 19:56:37 · 64 阅读 · 0 评论 -
leetcode-每日一道算法题
四数之和 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] : 0 <= a, b, c, d < n a、b、c 和 d 互不相同 nums[a] + nums[b] + nums[c] + nums[d] == target 你可以按 任意顺序 返回答案 。 示例 1: 输入:nums = [1,0,-1,0,-2,2], target = .原创 2021-08-10 21:34:43 · 92 阅读 · 0 评论 -
leetcode-每日一道算法题
电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits = “23” 输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”] 示例 2: 输入:digits = “” 输出:[] 示例 3: 输入:digits = “2” 输出:[“a”,“b”,“c”] 代码: class Solution { .原创 2021-08-09 20:00:06 · 48 阅读 · 0 评论 -
leetcode-每日一道算法题
最接近的三数之和 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 示例: 输入:nums = [-1,2,1,-4], target = 1 输出:2 解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。 代码: class Solution { public int threeSumClosest(int[] nums, int .原创 2021-08-08 21:55:36 · 51 阅读 · 0 评论 -
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] 输出:[] 代码: class Solution { public List&.原创 2021-08-06 12:34:09 · 38 阅读 · 0 评论 -
leetcode-每日一道算法题
最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs = [“flower”,“flow”,“flight”] 输出:“fl” 示例 2: 输入:strs = [“dog”,“racecar”,“car”] 输出:"" 解释:输入不存在公共前缀。 提示: 0 <= strs.length <= 200 0 <= strs[i].length <= 200 strs[i] 仅由小写英文字母组成 代码: c.原创 2021-08-02 22:23:46 · 61 阅读 · 0 评论 -
leetcode-每日一道算法题
整数转罗马数字 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V +.原创 2021-08-01 08:31:16 · 45 阅读 · 0 评论 -
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: 输入:height = [.原创 2021-07-31 18:25:24 · 80 阅读 · 0 评论 -
leetcode-每日一道算法题
正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 示例 1: 输入:s = “aa” p = “a” 输出:false 解释:“a” 无法匹配 “aa” 整个字符串。 示例 2: 输入:s = “aa” p = “a*” 输出:true 解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素.原创 2021-07-31 09:33:03 · 98 阅读 · 0 评论 -
LeetCode-每日一道算法题
回文数 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。 示例 1: 输入:x = 121 输出:true 示例 2: 输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入:x = 10 输出:false 解释:从右向左读, 为 01 。因此它不是一个回文数。 示.原创 2021-07-28 09:19:39 · 70 阅读 · 0 评论 -
leetcode-每日一道算法题
字符串转换整数 (atoi) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 将前面步骤读入的这些.原创 2021-07-27 22:16:37 · 207 阅读 · 0 评论 -
leetcode-每日一道算法题
整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: 输入:x = 123 输出:321 示例 2: 输入:x = -123 输出:-321 示例 3: 输入:x = 120 输出:21 示例 4: 输入:x = 0 输出:0 代码: class Solution { public int revers.原创 2021-07-25 10:45:50 · 113 阅读 · 0 评论 -
leetcode-每日一道算法题
⬇↗⬇字形变换: 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 ⬇↗⬇ 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下: P A H N A P L S I I G Y I R 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。 示例 1: 输入:s = “PAYPALISHIRING”, numRows = 3 输出:“PAHNAPLSIIGYIR” 示例.原创 2021-07-24 13:42:45 · 69 阅读 · 0 评论 -
leetcode-每日一道算法题
最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 示例 2: 输入:s = “cbbd” 输出:“bb” 示例 3: 输入:s = “a” 输出:“a” 示例 4: 输入:s = “ac” 输出:“a” 代码: class Solution { /** *暴力解法 */ public String longestPalindrome(String s) { .原创 2021-07-24 09:52:12 · 28 阅读 · 0 评论 -
LeetCode-每日一道算法题
寻找两个正序数组的中位数 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 示例 1: 输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数 2 示例 2: 输入:nums1 = [1,2], nums2 = [3,4] 输出:2.50000 解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5 示例 3: 输入:nums.原创 2021-07-20 13:18:09 · 183 阅读 · 0 评论 -
leetcode-每天一道算法题
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列原创 2021-07-15 21:34:20 · 58 阅读 · 0 评论 -
leetcode-每天一道算法题
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 1: 输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807. 代码: class Solution { public ListNode addTwoNumbers(ListNode l1, Lis原创 2021-07-13 22:30:58 · 96 阅读 · 0 评论 -
leetcode-一天一道算法题
两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 代码展示: class Solution { public int[] twoSum(int[] nums, int target) { int[] result = new int[2]; //被.原创 2021-07-12 20:43:35 · 93 阅读 · 0 评论