leetcode
江南小张
这个作者很懒,什么都没留下…
展开
-
leetcode_967 返回所有长度为 n 且满足其每两个连续位上的数字之间的差的绝对值为 k 的 非负整数 。
leetcode_967 返回所有长度为 n 且满足其每两个连续位上的数字之间的差的绝对值为 k 的 非负整数 。请注意,除了 数字 0 本身之外,答案中的每个数字都 不能 有前导零。例如,01 有一个前导零,所以是无效的;但 0 是有效的。你可以按 任何顺序 返回答案。示例 1:输入:n = 3, k = 7输出:[181,292,707,818,929]解释:注意,070 不是一个有效的数字,因为它有前导零。class Solution { List<Integer>原创 2021-03-22 21:24:29 · 363 阅读 · 0 评论 -
leetcode_1775. 通过最少操作次数使数组的和相等
leetcode_1775. 通过最少操作次数使数组的和相等给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间(包含 1 和 6)。每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 之间 任意 的值(包含 1 和 6)。请你返回使 nums1 中所有数的和与 nums2 中所有数的和相等的最少操作次数。如果无法使两个数组的和相等,请返回 -1 。示例 1:输入:nums1 = [1,2,3,4,5,6], nums2 =原创 2021-03-09 21:09:54 · 292 阅读 · 0 评论 -
leetcode1487. 保证文件名唯一
leetcode1487. 保证文件名唯一给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹:在第 i 分钟,新建名为 names[i] 的文件夹。由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以 (k) 的形式为新文件夹的文件名添加后缀,其中 k 是能保证文件名唯一的 最小正整数 。返回长度为 n 的字符串数组,其中 ans[i] 是创建第 i 个文件夹时系统分配给该文件夹的实际名称。示例 1:输入:names = [“p原创 2020-12-19 14:16:03 · 204 阅读 · 1 评论 -
letcode424. 替换后的最长重复字符
letcode424. 替换后的最长重复字符给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。注意:字符串长度 和 k 不会超过 104。示例 1:输入:s = “ABAB”, k = 2输出:4解释:用两个’A’替换为两个’B’,反之亦然。代码class Solution { public int characterReplacement(String s, int k原创 2020-12-18 14:44:27 · 123 阅读 · 0 评论 -
leetcode409. 最长回文串
leetcode409. 最长回文串给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例 1:输入:“abccccdd”输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。代码:class Solution { public int longestPalindrome(String s) { //原创 2020-12-16 11:05:30 · 64 阅读 · 0 评论 -
leetcode290. 单词规律
leetcode290. 单词规律给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。示例1:输入: pattern = “abba”, str = “dog cat cat dog”输出: true代码一:单映射class Solution { public boolean wordPattern(String patter原创 2020-12-16 10:35:25 · 140 阅读 · 0 评论 -
leetcode5. 最长回文子串
leetcode5. 最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”代码一:中心扩散法class Solution { public String longestPalindrome(String s) { int start=0; int end=0;原创 2020-12-15 19:27:38 · 69 阅读 · 0 评论 -
leetcode738. 单调递增的数字
leetcode738. 单调递增的数字给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)示例 1:输入: N = 10输出: 9示例 2:输入: N = 1234输出: 1234示例 3:输入: N = 332输出: 299代码:class Solution { public int monotoneIncreas原创 2020-12-15 18:06:17 · 66 阅读 · 0 评论 -
leetcode1249. 移除无效的括号
leetcode1249. 移除无效的括号给你一个由 ‘(’、’)’ 和小写字母组成的字符串 s。你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。请返回任意一个合法字符串。有效「括号字符串」应当符合以下 任意一条 要求:空字符串或只包含小写字母的字符串可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」示例 1:输入:s = “le原创 2020-12-14 13:44:49 · 167 阅读 · 0 评论 -
面试题 10.02. 变位词组
面试题 10.02. 变位词组编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。注意:本题相对原题稍作修改示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]代码:class Solution { public List<List<String>> groupAna原创 2020-12-14 10:38:33 · 110 阅读 · 0 评论 -
leetcode1638. 统计只差一个字符的子串数目
leetcode1638. 统计只差一个字符的子串数目给你两个字符串 s 和 t ,请你找出 s 中的非空子串的数目,这些子串满足替换 一个不同字符 以后,是 t 串的子串。换言之,请你找到 s 和 t 串中 恰好 只有一个字符不同的子字符串对的数目。比方说, “computer” 和 “computation” 加粗部分只有一个字符不同: ‘e’/‘a’ ,所以这一对子字符串会给答案加 1 。请你返回满足上述条件的不同子字符串对数目。一个 子字符串 是一个字符串中连续的字符。示例 1:输入:s原创 2020-12-13 15:36:09 · 253 阅读 · 0 评论 -
leetcode1525. 字符串的好分割数目
leetcode1525. 字符串的好分割数目给你一个字符串 s ,一个分割被称为 「好分割」 当它满足:将 s 分割成 2 个字符串 p 和 q ,它们连接起来等于 s 且 p 和 q 中不同字符的数目相同。请你返回 s 中好分割的数目。示例 1:输入:s = “aacaba”输出:2解释:总共有 5 种分割字符串 “aacaba” 的方法,其中 2 种是好分割。(“a”, “acaba”) 左边字符串和右边字符串分别包含 1 个和 3 个不同的字符。(“aa”, “caba”) 左边字符转载 2020-12-13 14:59:16 · 162 阅读 · 0 评论 -
面试题 17.11. 单词距离
面试题 17.11. 单词距离有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?示例:输入:words = [“I”,“am”,“a”,“student”,“from”,“a”,“university”,“in”,“a”,“city”], word1 = “a”, word2 = “student”输出:1思路;双指针不停+滑动窗口代码class Solution {原创 2020-12-11 14:28:19 · 101 阅读 · 0 评论 -
leetcode791. 自定义字符串排序
leetcode791. 自定义字符串排序字符串S和 T 只包含小写字符。在S中,所有字符只会出现一次。S 已经根据某种规则进行了排序。我们要根据S中的字符顺序对T进行排序。更具体地说,如果S中x在y之前出现,那么返回的字符串中x也应出现在y之前。返回任意一种符合条件的字符串T。示例:输入:S = “cba”T = “abcd”输出: “cbad”解释:S中出现了字符 “a”, “b”, “c”, 所以 “a”, “b”, “c” 的顺序应该是 “c”, “b”, “a”.由于 “d”原创 2020-12-11 13:57:02 · 128 阅读 · 0 评论 -
leetcode890. 查找和替换模式
leetcode890. 查找和替换模式你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。(回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。)返回 words 中与给定模式匹配的单词列表。你可以按任何顺序返回答案。示例:输入:words = [“abc”,“deq”原创 2020-12-10 11:34:40 · 94 阅读 · 0 评论 -
leetcode_1576. 替换所有的问号
leetcode_1576. 替换所有的问号给你一个仅包含小写英文字母和 ‘?’ 字符的字符串 s,请你将所有的 ‘?’ 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。注意:你 不能 修改非 ‘?’ 字符。题目测试用例保证 除 ‘?’ 字符 之外,不存在连续重复的字符。在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。示例 1:输入:s = “?zs”输出:“azs”解释:该示例共有 25原创 2020-12-09 10:41:31 · 330 阅读 · 0 评论 -
leetcode21. 合并两个有序链表
leetcode21. 合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:尾插法;然后谁没结束就把结尾指向那个没结束的就行了。代码:class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) {原创 2020-12-07 14:46:03 · 101 阅读 · 0 评论 -
leetcode20. 有效的括号
leetcode20. 有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。思路:利用栈,遍历数组如果是左半边,那么就入栈对应的右半边;如果遍历的字符是右半边,此时如果栈为空或者字符不等于出栈元素,那么就判断为false。最有如果栈不为空就是false。代码:class Solution { public boolea原创 2020-12-07 14:26:09 · 89 阅读 · 0 评论 -
leetcode_204. 计数质数
leetcode_204. 计数质数统计所有小于非负整数 n 的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。思路 一:暴力破解+优化class Solution { public boolean isTrue(int num){ for(int i=2;i<=Math.sqrt(num);i++){ if(num%i==0) re原创 2020-12-03 10:58:28 · 103 阅读 · 0 评论 -
leetcode670. 最大交换
leetcode670. 最大交换给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。示例 1 :输入: 2736输出: 7236解释: 交换数字2和数字7。思路一:找出当前位置后面的比他的那个数时间复杂度n^2代码:class Solution { public void swap(char[] nums, int i, int j) { char temp = nums[i]; nums[i] = nums[j];原创 2020-12-02 11:49:46 · 244 阅读 · 0 评论 -
leetcode_1046.最后一块石头的重量
leetcode_1046.最后一块石头的重量题目描述有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。示例:输入:[2,7,4,1,8,1]输出:原创 2020-12-01 13:45:57 · 108 阅读 · 0 评论 -
leetcode_976 三角形的最大周长
leetcode_976 三角形的最大周长题目:给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回 0。思路对数组进行排序后,从后向前进行操作,如果有三个相连的数满足三角形的规则就是最优结果论证最优解为什么是三个相连的证明:反证 假设 a , b, c 为最优解,且存在a’,b’,满足 a < a’ < b < b’ < c(存在非相邻元素)由于 a + b > c,a <原创 2020-11-29 14:26:26 · 90 阅读 · 0 评论 -
leetcode_7正数翻转
leetcode_7正数翻转题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。代码:```java public int reverse(int x) { //先都转化为正数进行操作,因为取余和除以10 的操作可能会导致数组的丢失 int y=Math.abs(x); i原创 2020-11-28 09:35:32 · 133 阅读 · 0 评论 -
leetcode_454四数之和
题目:454. 四数相加 II给定四个包含整数的数组列表 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 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。思路:用空间换取时间,四个数组的时间复杂度太高代码:class Solution {public int fou原创 2020-11-27 15:37:16 · 254 阅读 · 0 评论 -
leetcode_34. 在排序数组中查找元素的第一个和最后一个位置
leetcode_34. 在排序数组中查找元素的第一个和最后一个位置题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。要求你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]思路:排序+时间复杂度为logn,所以很容易想到用变式的折半查找法。代原创 2020-12-01 11:35:45 · 57 阅读 · 0 评论 -
leetcode_41 缺失的第一个正数
leetcode_41 缺失的第一个正数题目缺失的第一个正数给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0]输出: 3思路思路一:置换,将数组中当前位置的数字置换到他应该存在的地方,一直置换直到需要置换的数字已经是这个数字了再来一个for循环,如果当前位置对应不了位置加一的数字则说明缺失,需要返回。缺失的数字一定[1,nums.length+1]之中代码:class Solution { public void swap(i原创 2020-11-30 21:36:27 · 107 阅读 · 0 评论