leetcode
兔老大RabbitMQ
我是全站最硬核博主。我话讲完,谁赞成,谁反对?
展开
-
leetcode1047. 删除字符串中的所有相邻重复项(栈的日常应用)
给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:"abbaca"输出:"ca"解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。提示:...原创 2021-03-11 12:34:27 · 4919 阅读 · 58 评论 -
leetcode976. 三角形的最大周长(又是你得不到的简单题)
给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回0。示例 1:输入:[2,1,2]输出:5示例 2:输入:[1,2,1]输出:0示例 3:输入:[3,2,3,4]输出:10示例 4:输入:[3,6,2,3]输出:8提示:3 <= A.length <= 100001 <= A[i] <= 10^6class Solution {...原创 2021-03-08 15:59:41 · 8350 阅读 · 38 评论 -
leetcode1528. 重新排列字符串
给你一个字符串 s 和一个 长度相同 的整数数组 indices 。请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。返回重新排列后的字符串。示例 1:输入:s = "codeleet", indices = [4,5,6,7,0,2,1,3]输出:"leetcode"解释:如图所示,"codeleet" 重新排列后变为 "leetcode" 。示例 2:输入:s = "abc", indices = [0,1,2]输出:"abc".原创 2021-03-08 15:52:55 · 2834 阅读 · 20 评论 -
leetcode1502. 判断能否形成等差数列(小学生难度)
给你一个数字数组 arr 。如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。示例 1:输入:arr = [3,5,1]输出:true解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别为 2 或 -2 ,可以形成等差数列。示例 2:输入:arr = [1,2,4]输出:false解释:无法通过重新排序得到等差数列。提示..原创 2021-03-08 15:47:05 · 3415 阅读 · 14 评论 -
leetcode1721. 交换链表中的节点
给你链表的头节点 head 和一个整数 k 。交换 链表正数第 k 个节点和倒数第 k 个节点的值后,返回链表的头节点(链表 从 1 开始索引)。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[1,4,3,2,5]示例 2:输入:head = [7,9,6,6,7,8,3,0,9,5], k = 5输出:[7,9,6,6,8,7,3,0,9,5]示例 3:输入:head = [1], k = 1输出:[1]示例 4:输入:head = [.原创 2021-03-07 17:22:17 · 2761 阅读 · 30 评论 -
leetcode1669. 合并两个链表
给你两个链表list1 和list2,它们包含的元素分别为n 个和m 个。请你将list1中第a个节点到第b个节点删除,并将list2接在被删除节点的位置。下图中蓝色边和节点展示了操作后的结果:请你返回结果链表的头指针。示例 1:输入:list1 = [0,1,2,3,4,5], a = 3, b = 4, list2 = [1000000,1000001,1000002]输出:[0,1,2,1000000,1000001,1000002,5]解释:我...原创 2021-03-07 17:16:41 · 5104 阅读 · 20 评论 -
leetcode设计链表,非常工整的实现你值得拥有
设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性prev以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第index个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为val的节点。插入后,新节点将成为链表的...原创 2021-03-07 17:14:31 · 10170 阅读 · 37 评论 -
leetcode453. 最小操作次数使数组元素相等(贼难的简单题)
给定一个长度为 n 的 非空 整数数组,每次操作将会使 n - 1 个元素增加 1。找出让数组所有元素相等的最小操作次数。示例:输入:[1,2,3]输出:3解释:只需要3次操作(注意每次操作会增加两个元素的值):[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]思路n-1个数同时加一,就好比每次有一个数自身减一,这样的话每个元素减去最小值求其和就是答案。class Solution(object):...原创 2021-03-05 16:59:54 · 3711 阅读 · 37 评论 -
leetcode628. 三个数的最大乘积(简单,我觉得你不会)
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:输入:nums = [1,2,3]输出:6示例 2:输入:nums = [1,2,3,4]输出:24示例 3:输入:nums = [-1,-2,-3]输出:-6提示:3 <= nums.length <=104-1000 <= nums[i] <= 1000思路:有三个以上正数:三大有两个正数:两小一大有一个正数:两小一大没正...原创 2021-03-05 16:27:57 · 3419 阅读 · 23 评论 -
leetcode541. 反转字符串 II(字符串一律用py秒杀)
给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔2k 个字符的前 k 个字符进行反转。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。示例:输入: s = "abcdefg", k = 2输出: "bacdfeg"提示:该字符串只包含小写英文字母。给定字符串的长度和 k 在 [1, 10000] 范围内。思路:通俗一点说,每隔k个反转k个,末尾不够k个时全部反转;...原创 2021-03-05 15:06:41 · 12498 阅读 · 24 评论 -
leetcode884. 两句话中的不常见单词(你肯定会被惊呆了)
给定两个句子A和B。(句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。返回所有不常用单词的列表。您可以按任何顺序返回列表。示例 1:输入:A = "this apple is sweet", B = "this apple is sour"输出:["sweet","sour"]示例2:输入:A = "apple apple", B = "banana"输出:["...原创 2021-03-03 16:34:02 · 7495 阅读 · 46 评论 -
leetcode896. 单调数列
如果数组是单调递增或单调递减的,那么它是单调的。如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。当给定的数组 A是单调数组时返回 true,否则返回 false。示例 1:输入:[1,2,2,3]输出:true示例 2:输入:[6,5,4,4]输出:true示例 3:输入:[1,3,2]输出:false示例 4:输入:[..原创 2021-03-03 16:31:41 · 2496 阅读 · 20 评论 -
leetcode258. 各位相加(简单题,但是你不看答案想不出来)
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。示例:输入: 38输出: 2解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于2 是一位数,所以返回 2。进阶:你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?思路:我想的是给的int是有范围的,我就重复很多次即可。class Solution { public int addDigits(int num) { num = num % 1..原创 2021-03-03 16:30:28 · 9529 阅读 · 85 评论 -
leetcode867. 转置矩阵
给你一个二维整数数组 matrix,返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:输入:matrix = [[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]]提示:m == matrix.lengthn == matrix[i].leng..原创 2021-03-03 16:24:23 · 2560 阅读 · 17 评论 -
leetcode771. 宝石与石头 py永远的神!
给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。示例 1:输入:nums = [12,345,2,6,7896]输出:2解释:12 是 2 位数字(位数为偶数)345 是 3 位数字(位数为奇数) 2 是 1 位数字(位数为奇数)6 是 1 位数字 位数为奇数)7896 是 4 位数字(位数为偶数) 因此只有 12 和 7896 是位数为偶数的数字示例 2:输入:nums = [555,901,482,1771]输出:1解释:只...原创 2020-07-19 20:41:01 · 3123 阅读 · 86 评论 -
leetcode771. 宝石与石头
给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例 1:输入: J = "aA", S = "aAAbbbb"输出: 3示例 2:输入: J = "z", S = "ZZ"输出: 0注意: S 和 J 最多含有50个字母。 J 中的字符不重复。...原创 2020-07-19 20:37:36 · 2766 阅读 · 28 评论 -
leetcode1119. 删去字符串中的元音 小学难度
给你一个字符串 S,请你删去其中的所有元音字母( 'a','e','i','o','u'),并返回这个新字符串。示例 1:输入:"leetcodeisacommunityforcoders"输出:"ltcdscmmntyfrcdrs"示例 2:输入:"aeiou"输出:""提示: S 仅由小写英文字母组成。 1 <= S.length <= 1000遍历或者replaceallclass Solution { publ...原创 2020-07-19 20:35:21 · 3083 阅读 · 14 评论 -
leetcode1299. 将每个元素替换为右侧最大元素
给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换。完成所有替换操作后,请你返回这个数组。示例:输入:arr = [17,18,5,4,6,1]输出:[18,6,6,6,1,-1]提示: 1 <= arr.length <= 10^4 1 <= arr[i] <= 10^5逆序遍历,记录之前答案,和当前元素比对即可。class Solution: def replace...原创 2020-07-19 20:32:41 · 2455 阅读 · 11 评论 -
leetcode709. 转换成小写字母 最秀狼人做法(比狠多一点)
实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。示例 1:输入: "Hello"输出: "hello"示例 2:输入: "here"输出: "here"示例 3:输入: "LOVELY"输出: "lovely"一个一个的比着换,狠不狠。class Solution: def toLowerCase(self, str: str) -> str: st.原创 2020-07-19 20:25:24 · 3662 阅读 · 62 评论 -
leetcode1085. 最小元素各数位之和 py不止是字符串的神!
给你一个正整数的数组 A。然后计算 S,使其等于数组 A 当中最小的那个元素各个数位上数字之和。最后,假如 S 所得计算结果是 奇数 的请你返回 0,否则请返回 1。示例 1:输入:[34,23,1,24,75,33,54,8]输出:0解释:最小元素为 1,该元素各个数位上的数字之和 S = 1,是奇数所以答案为 0。示例 2:输入:[99,77,33,66,55]输出:1解释:最小元素为 33,该元素各个数位上的数字之和 S = 3 + 3 = 6,是偶数所以答.原创 2020-07-19 20:22:54 · 10584 阅读 · 54 评论 -
leetcode1207. 独一无二的出现次数
给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。示例 1:输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。示例 2:输入:arr = [1,2]输出:false示例 3:输入:arr = [-3,0,1,-3,1,1,1,-3,10,0]输出:true..原创 2020-07-19 20:20:05 · 2442 阅读 · 15 评论 -
leetcode1491. 工资平均值 这也叫题?也太简单了吧
给你一个整数数组 salary ,数组里每个数都是 唯一 的,其中 salary[i] 是第 i 个员工的工资。请你返回去掉最低工资和最高工资以后,剩下员工工资的平均值。示例 1:输入:salary = [4000,3000,1000,2000]输出:2500.00000解释:最低工资和最高工资分别是 1000 和 4000 。去掉最低工资和最高工资以后的平均工资是 (2000+3000)/2= 2500示例 2:输入:salary = [1000,2000,3000]输.原创 2020-07-19 20:15:23 · 3050 阅读 · 30 评论 -
leetcode559. N叉树的最大深度
给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。例如,给定一个 3叉树 :我们应返回其最大深度,3。说明: 树的深度不会超过 1000。 树的节点总不会超过 5000。思路见代码/*// Definition for a Node.class Node { public int val; public List<Node> children; public Node...原创 2020-07-19 20:12:59 · 2643 阅读 · 36 评论 -
leetcode933. 最近的请求次数
写一个 RecentCounter 类来计算最近的请求。它只有一个方法:ping(int t),其中 t 代表以毫秒为单位的某个时间。返回从 3000 毫秒前到现在的 ping 数。任何处于 [t - 3000, t] 时间范围之内的 ping 都将会被计算在内,包括当前(指 t 时刻)的 ping。保证每次对 ping 的调用都使用比之前更大的 t 值。示例:输入:inputs = ["RecentCounter","ping","ping","ping","ping"], .原创 2020-07-19 20:10:48 · 2570 阅读 · 20 评论 -
leetcode700. 二叉搜索树中的搜索
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值: 2你应该返回如下子树: 2 / \ 1 3在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。就是搜索树的查找。/**...原创 2020-07-05 16:34:44 · 2431 阅读 · 19 评论 -
leetcode645. 错误的集合
645. 错误的集合难度简单98集合S包含从1到n的整数。不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复。给定一个数组nums代表了集合S发生错误后的结果。你的任务是首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。示例 1:输入: nums = [1,2,2,4]输出: [2,3]注意:给定数组的长度范围是[2, 10000]。 给定的数组是无序的。记录出...原创 2020-07-05 16:20:57 · 2472 阅读 · 20 评论 -
leetcode485. 最大连续1的个数 *py:“又是一行就解决了,没意思”
给定一个二进制数组, 计算其中最大连续1的个数。示例 1:输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.注意:输入的数组只包含0 和1。输入数组的长度是正整数,且不超过 10,000。思路:先拼成字符串,然后按0分割,再取最大长度即可。class Solution: def findMaxConsecutiveOnes(self, nums: List[int]) -> int: .原创 2020-06-25 16:48:04 · 13796 阅读 · 116 评论 -
leetcode面试题 02.08. 环路检测
给定一个有环链表,实现一个算法返回环路的开头节点。有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:tail connects to node index 0解释:链表中有一个环,其尾部连接到第一个原创 2020-06-14 18:41:13 · 2664 阅读 · 36 评论 -
leetcode445. 两数相加 II
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 8 -> 0 -> 7思路:放入栈中再相加。/** * Definit原创 2020-06-06 02:57:40 · 9692 阅读 · 54 评论 -
leetcode359. 日志速率限制器
请你设计一个日志系统,可以流式接收日志以及它的时间戳。该日志会被打印出来,需要满足一个条件:当且仅当日志内容在过去的 10 秒钟内没有被打印过。给你一条日志的内容和它的时间戳(粒度为秒级),如果这条日志在给定的时间戳应该被打印出来,则返回true,否则请返回false。要注意的是,可能会有多条日志在同一时间被系统接收。示例:Logger logger = new Logger();// 日志内容 "foo" 在时刻 1 到达系统logger.shouldPrintMessag...原创 2020-05-30 17:44:57 · 11247 阅读 · 98 评论 -
leetcode412. Fizz Buzz
写一个程序,输出从 1 到 n 数字的字符串表示。1. 如果n是3的倍数,输出“Fizz”;2. 如果n是5的倍数,输出“Buzz”;3.如果n同时是3和5的倍数,输出 “FizzBuzz”。示例:n = 15,返回:[ "1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz",...原创 2020-05-30 17:33:43 · 11329 阅读 · 67 评论 -
leetcode258. 各位相加
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。示例:输入: 38输出: 2解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于2 是一位数,所以返回 2。进阶:你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?时间复杂度为O(1)的解法:除个位外,每一位上的值都是通过(9+1)进位的过程得到的,想一下拨算盘进位把整数n看成n样物品,原本是以10个1份打包的,现在从这些10个1份打包好的里面,拿出1个,让它们以9..转载 2020-05-30 17:13:03 · 3908 阅读 · 21 评论 -
leetcode193. 有效电话号码 正则了解一下
给定一个包含电话号码列表(一行一个电话号码)的文本文件 file.txt,写一个 bash 脚本输出所有有效的电话号码。你可以假设一个有效的电话号码必须满足以下两种格式: (xxx) xxx-xxxx 或xxx-xxx-xxxx。(x 表示一个数字)你也可以假设每行前后没有多余的空格字符。示例:假设file.txt内容如下:987-123-4567123 456 7890(123) 456-7890你的脚本应当输出下列有效的电话号码:987-123-4567(123) ...原创 2020-05-30 17:11:00 · 2671 阅读 · 29 评论 -
leetcode369. 给单链表加一
用一个 非空 单链表来表示一个非负整数,然后将这个整数加一。你可以假设这个整数除了 0 本身,没有任何前导的 0。这个整数的各个数位按照 高位在链表头部、低位在链表尾部的顺序排列。示例:输入: [1,2,3]输出: [1,2,4]思路:help():计算本位的数字,然后返回进位(0或1)plusOne():因为help方法无法判断自己是否是最高位,所以在本方法中做一下处理。如果有进位,就再加一位最高的1即可。/** * Definition for singly-li.原创 2020-05-30 14:21:50 · 3314 阅读 · 27 评论 -
leetcode557. 反转字符串中的单词 III python,处理字符串的神!
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例1:输入: "Let's take LeetCode contest"输出: "s'teL ekat edoCteeL tsetnoc"注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。思路:python处理,先split分割为列表,再用列表生成式把每一项翻转,再用join拼起来即可。class Solution: def reverseWords(self,..原创 2020-05-28 23:43:26 · 12287 阅读 · 113 评论 -
go语言快速刷《程序员面试金典》(3)
编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。示例:输入: head = 3->5->8->5->10->2->1, x = 5输出: 3->1->2->10->5->5->8一趟分离,然后连起来即可。/** * Definition f原创 2020-05-18 22:44:17 · 7826 阅读 · 53 评论 -
go语言快速刷《程序员面试金典》(2)
字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。示例1输入:s1 = "waterbottle", s2 = "erbottlewat"输出:True示例2输入:s1 = "aa", "aba"输出:Falsefunc isFlipedString(s1 string, s2 string) bool { return len(s1) == len(s2) &&.原创 2020-05-18 20:02:44 · 12035 阅读 · 75 评论 -
go语言快速刷《程序员面试金典》(1)
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。一个数组统计是否有func isUnique(astr string) bool { var arr[26] int; for _,ch:=range astr{ num:=ch-'a' if(arr[num]==1){ return false } arr[num]++ } return true}给定两个字符串原创 2020-05-18 19:21:33 · 7687 阅读 · 42 评论 -
leetcode912. 排序数组 有范围的排序统统用桶排序
给你一个整数数组nums,请你将该数组升序排列。示例 1:输入:nums = [5,2,3,1]输出:[1,2,3,5]示例 2:输入:nums = [5,1,1,2,0,0]输出:[0,0,1,1,2,5]提示:1 <= nums.length <= 50000-50000 <= nums[i] <= 50000有范围的排序统统...原创 2020-05-07 21:23:09 · 3312 阅读 · 22 评论 -
leetcode1103. 分糖果 II 该模拟就模拟,别老想着优化
排排坐,分糖果。我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n颗糖果。然后,我们再回到队伍的起点,给第一个小朋友 n+ 1 颗糖果,第二个小朋友 n+ 2 颗,依此类推,直到给最后一个小朋友 2 * n颗糖果。重复上述过程(每次都比上一次多...原创 2020-05-07 21:18:27 · 2602 阅读 · 35 评论