力扣
力扣
野生程序猿RW
2020年毕业于台湾科技大学(Taiwan Tech),后端开发工程师一枚。
展开
-
Rotate Function
396. Rotate FunctionYou are given an integer array nums of length n.Assume arrk to be an array obtained by rotating nums by k positions clock-wise. We define the rotation function F on nums as follow:F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * ar原创 2022-04-22 22:22:00 · 299 阅读 · 0 评论 -
386. Lexicographical Numbers
386. Lexicographical NumbersGiven an integer n, return all the numbers in the range [1, n] sorted in lexicographical order.You must write an algorithm that runs in O(n) time and uses O(1) extra space.Example 1:Input: n = 13Output: [1,10,11,12,13,2,3,4原创 2022-04-18 21:38:38 · 259 阅读 · 2 评论 -
380. O(1) 时间插入、删除和获取随机元素(必会,变长数组 + 哈希表)
380. O(1) 时间插入、删除和获取随机元素class RandomizedSet { List<Integer> nums; Map<Integer, Integer> indices; Random random; public RandomizedSet() { nums = new ArrayList<Integer>(); indices = new HashMap<Integer,原创 2022-04-13 23:37:32 · 218 阅读 · 0 评论 -
804. 唯一摩尔斯密码词(对照转换)
804. 唯一摩尔斯密码词给你一个字符串数组 words ,每个单词可以写成每个字母对应摩尔斯密码的组合。例如,“cab” 可以写成 “-.-…–…” ,(即 “-.-.” + “.-” + “-…” 字符串的结合)。我们将这样一个连接过程称作 单词翻译 。对 words 中所有单词进行单词翻译,返回不同 单词翻译 的数量。class Solution { public static final String[] MORSE = {".-", "-...", "-.-.", "-..", "原创 2022-04-10 15:24:06 · 249 阅读 · 0 评论 -
204. 计数质数
204. 计数质数给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。1和2不是质数class Solution { public int countPrimes(int n) { int ans = 0; for (int i = 2; i < n; ++i) { ans += isPrime(i) ? 1 : 0; } return ans; } public boolea原创 2022-04-05 16:52:13 · 340 阅读 · 0 评论 -
位运算模版
191. 位1的个数public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int ret = 0; while (n != 0) { n &= n - 1; ++ret; } return ret; }}..原创 2022-04-05 16:39:20 · 236 阅读 · 0 评论 -
2038. 如果相邻两个颜色均相同则删除当前颜色
2038. 如果相邻两个颜色均相同则删除当前颜色总共有 n 个颜色片段排成一列,每个颜色片段要么是 ‘A’ 要么是 ‘B’ 。给你一个长度为 n 的字符串 colors ,其中 colors[i] 表示第 i 个颜色片段的颜色。Alice 和 Bob 在玩一个游戏,他们 轮流 从这个字符串中删除颜色。Alice 先手 。如果一个颜色片段为 ‘A’ 且 相邻两个颜色 都是颜色 ‘A’ ,那么 Alice 可以删除该颜色片段。Alice 不可以 删除任何颜色 ‘B’ 片段。如果一个颜色片段为 ‘B’ 且原创 2022-03-23 00:53:35 · 4382 阅读 · 0 评论 -
504. 七进制数
504. 七进制数给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。示例 1:输入: num = 100输出: "202"示例 2:输入: num = -7输出: "-10"class Solution { public String convertToBase7(int num) { if(num == 0) { return "0"; } boolean negative = num <原创 2022-03-07 22:53:04 · 128 阅读 · 0 评论 -
6. ZigZag Conversion(constructive algorithms,图像规律或者等差数列解)
6. ZigZag ConversionThe string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)P A H NA P L S I I GY I RAnd then read line by l原创 2022-03-01 23:39:38 · 69 阅读 · 0 评论 -
215. 数组中的第K个最大元素(优先队列,堆排序)
215. 数组中的第K个最大元素优先队列的思路是很朴素的。由于找第 K 大元素,其实就是整个数组排序以后后半部分最小的那个元素。因此,我们可以维护一个有 K 个元素的最小堆:如果当前堆不满,直接添加;堆满的时候,如果新读到的数小于等于堆顶,肯定不是我们要找的元素,只有新遍历到的数大于堆顶的时候,才将堆顶拿出,然后放入新读到的数,进而让堆自己去调整内部结构。说明:这里最合适的操作其实是 replace(),即直接把新读进来的元素放在堆顶,然后执行下沉(siftDown())操作。Java 当中的 Pr原创 2022-02-28 20:15:41 · 511 阅读 · 0 评论 -
703. 数据流中的第 K 大元素(优先队列,堆排序)
数据流中的第 K 大元素设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。请实现 KthLargest 类:KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。示例:输入:["KthLargest", "add", "add", "add", "add", "add"].原创 2022-02-28 19:49:07 · 320 阅读 · 0 评论 -
844. 比较含退格的字符串(双指针)
844. 比较含退格的字符串示例 1:输入:s = "ab#c", t = "ad#c"输出:true解释:s 和 t 都会变成 "ac"。示例 2:输入:s = "ab##", t = "c#d#"输出:true解释:s 和 t 都会变成 ""。示例 3:输入:s = "a#c", t = "b"输出:false解释:s 会变成 "c",但 t 仍然是 "b"。给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字原创 2022-02-28 19:16:59 · 211 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列(滑动窗口(双指针))
剑指 Offer 57 - II. 和为s的连续正数序列输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:1 <= target <= 10^5滑动窗口一般表示成一个左闭右开区间滑动窗口只原创 2022-02-28 18:11:19 · 72 阅读 · 0 评论 -
148. 排序链表(快慢指针 + 归并)
148. 排序链表给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。输入:head = [4,2,1,3]输出:[1,2,3,4]/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; }原创 2022-02-28 14:24:29 · 233 阅读 · 0 评论 -
2. 两数相加(dummyNode + 进制)
2. 两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9],原创 2022-02-26 21:51:48 · 92 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组(双指针)
167. 两数之和 II - 输入有序数组给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是numbers[index1] 和 numbers[index2] ,则1 <= index1 < index2 <= numbers.length 。以长度为 2 的整数数组 [index1, index2]的形式返回这两个整数的下标index1 和 index2。你可以假原创 2022-02-23 00:16:18 · 245 阅读 · 0 评论 -
19. 删除链表的倒数第 N 个结点(dummyNode,等待复盘其他几种解法)
19. 删除链表的倒数第 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]class Solution { public ListNode removeNthFromEnd(ListNode head, int n) {原创 2022-02-22 20:19:58 · 155 阅读 · 0 评论 -
160. 相交链表(递归判断当前节点后面是空的么)
160. 相交链表给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。自定义评测:评测系统 的输入如下(你设计的程序 不适用 此输入):intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0listA - 第一个链表listB - 第二个链表ski原创 2022-02-22 19:33:02 · 52 阅读 · 0 评论 -
142. 环形链表 II(快慢指针)
142. 环形链表 II给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。/** * Definition for singly-link原创 2022-02-22 19:25:13 · 164 阅读 · 0 评论 -
543. 二叉树的直径
543. 二叉树的直径给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者[5,2,1,3]。/** * Definition for a binary tree node. * public class原创 2022-02-22 14:33:38 · 161 阅读 · 0 评论 -
1791. 找出星型图的中心节点
1791. 找出星型图的中心节点有一个无向的 星型 图,由n个编号从 1到 n的节点组成。星型图有一个 中心 节点,并且恰有 n - 1条边将中心节点与其他每个节点连接起来。给你一个二维整数数组 edges,其中edges[i] = [ui, vi]表示在节点 ui和 vi之间存在一条边。请你找出并返回edges 所表示星型图的中心节点。中心节点的度是 n - 1,其余每个节点的度都是 1。一个节点的度的含义是与该节点相连的边数输入:edges = [[1,2],[2,3],[4,2]]输出:2原创 2022-02-18 23:27:38 · 194 阅读 · 0 评论 -
141. 环形链表
141. 环形链表给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false 。输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接原创 2022-02-13 23:14:29 · 250 阅读 · 0 评论 -
21. 合并两个有序链表
合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) {.原创 2022-02-13 19:59:37 · 165 阅读 · 0 评论 -
2006. 差的绝对值为 K 的数对数目(两数之和版)
2006. 差的绝对值为 K 的数对数目给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足i < j 且 |nums[i] - nums[j]| == k。|x| 的值定义为:如果 x >= 0 ,那么值为 x 。如果 x < 0 ,那么值为 -x 。示例 1:输入:nums = [1,2,2,1], k = 1输出:4解释:差的绝对值为 1 的数对为:- [1,2,2,1]- [1,2,2,1]- [1,2,2,1]- [1,2原创 2022-02-09 18:27:16 · 311 阅读 · 0 评论 -
力扣第七十一场双周赛20210205
5984. 拆分数位后四位数字的最小和给你一个四位 正 整数 num 。请你使用 num 中的 数位 ,将 num 拆成两个新的整数 new1 和 new2 。new1 和 new2 中可以有 前导 0 ,且 num 中 所有 数位都必须使用。比方说,给你 num = 2932 ,你拥有的数位包括:两个 2 ,一个 9 和一个 3 。一些可能的 [new1, new2] 数对为 [22, 93],[23, 92],[223, 9] 和 [2, 329] 。请你返回可以得到的 new1 和 new2 的原创 2022-02-06 22:39:38 · 744 阅读 · 0 评论 -
2047. Number of Valid Words in a Sentence
2047. Number of Valid Words in a SentenceA sentence consists of lowercase letters ('a' to 'z'), digits ('0' to '9'), hyphens ('-'),punctuation marks ('!', '.', and ','), and spaces (' ')only. Each sentence can be broken down into one or more tokens separa原创 2022-01-27 18:37:05 · 318 阅读 · 0 评论 -
2034. 股票价格波动
2034. 股票价格波动给你一支股票价格的数据流。数据流中每一条记录包含一个 时间戳 和该时间点股票对应的 价格 。不巧的是,由于股票市场内在的波动性,股票价格记录可能不是按时间顺序到来的。某些情况下,有的记录可能是错的。如果两个有相同时间戳的记录出现在数据流中,前一条记录视为错误记录,后出现的记录 更正 前一条错误的记录。请你设计一个算法,实现:更新 股票在某一时间戳的股票价格,如果有之前同一时间戳的价格,这一操作将 更正 之前的错误价格。找到当前记录里 最新股票价格 。最新股票价格 定义为时间原创 2022-01-23 19:47:49 · 113 阅读 · 0 评论 -
219. 存在重复元素 II(滑动窗口)
219. 存在重复元素 II给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j]且 abs(i - j) <= k。如果存在,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,1], k = 3输出:true示例 2:输入:nums = [1,0,1,1], k = 1输出:true示例 3:输入:nums = [1,2,3,1,2,3], k = 2输出原创 2022-01-19 21:22:38 · 100 阅读 · 0 评论 -
539. 最小时间差(抽屉原理)
539. 最小时间差给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。示例 1:输入:timePoints = ["23:59","00:00"]输出:1示例 2:输入:timePoints = ["00:00","23:59","00:00"]输出:0提示:2 <= timePoints <= 2 * 104timePoints[i] 格式为 "HH:MM"class Solution { pu原创 2022-01-18 11:21:01 · 435 阅读 · 0 评论 -
71. 简化路径
71. 简化路径给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以'/'开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠'/'。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。请注意,返回的 规范路径 必须遵循下述格式:始终以斜杠 ‘/’原创 2022-01-06 17:53:27 · 69 阅读 · 0 评论 -
390. 消除游戏(约瑟夫环)
390. 消除游戏列表 arr 由在范围 [1, n]中的所有整数组成,并按严格递增排序。请你对 arr 应用下述算法:从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾。重复上面的步骤,但这次是从右到左。也就是,删除最右侧的数字,然后剩下的数字每隔一个删除一个。不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。给你整数 n ,返回 arr 最后剩下的数字。示例 1:输入:n = 9输出:6解释:arr = [1, 2, 3, 4, 5, 6, 7, 8原创 2022-01-02 19:07:56 · 2390 阅读 · 0 评论 -
1078. Bigram 分词
1078. Bigram 分词给出第一个词 first 和第二个词 second,考虑在某些文本 text 中可能以 “first second third” 形式出现的情况,其中 second 紧随 first 出现,third 紧随 second 出现。对于每种这样的情况,将第三个词 “third” 添加到答案中,并返回答案。示例 1:输入:text = "alice is a good girl she is a good student", first = "a", second = "go原创 2021-12-26 18:51:23 · 123 阅读 · 0 评论 -
997. 找到小镇的法官(入度和出度)
997. 找到小镇的法官本题需要用到有向图中节点的入度和出度的概念。在有向图中,一个节点的入度是指向该节点的边的数量;而一个节点的出度是从该节点出发的边的数量。在一个小镇里,按从 1 到 n 为 n 个人进行编号。传言称,这些人中有一个是小镇上的秘密法官。如果小镇的法官真的存在,那么:小镇的法官不相信任何人。每个人(除了小镇法官外)都信任小镇的法官。只有一个人同时满足条件 1 和条件 2 。给定数组 trust,该数组由信任对 trust[i] = [a, b]组成,表示编号为 a 的人信任编原创 2021-12-19 20:02:35 · 125 阅读 · 0 评论 -
419. 甲板上的战舰
419. 甲板上的战舰给你一个大小为m x n的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 ‘X’ 或者是一个空位'.',返回在甲板 board 上放置的 战舰 的数量。战舰 只能水平或者垂直放置在 board 上。换句话说,战舰只能按1 x k(1 行,k 列)或 k x 1(k 行,1 列)的形状建造,其中 k 可以是任意大小。两艘战舰之间至少有一个水平或垂直的空位分隔 (即没有相邻的战舰)。输入:board = [["X",".",".","X"],[".",".",".","原创 2021-12-18 15:11:02 · 198 阅读 · 0 评论 -
709. 转换成小写字母(位运算)
709. 转换成小写字母给你一个字符串 s ,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。示例 1:输入:s = "Hello"输出:"hello"示例 2:输入:s = "here"输出:"here"示例 3:输入:s = "LOVELY"输出:"lovely"class Solution { public String toLowerCase(String s) { StringBuilder sb = new StringBuilde原创 2021-12-12 18:54:02 · 281 阅读 · 0 评论 -
383. 赎金信(词频统计)
383. 赎金信为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思。给你一个赎金信 (ransomNote) 字符串和一个杂志(magazine)字符串,判断 ransomNote 能不能由 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。示例 1:输入:ransomNote = "a", magazine = "b"输出:false示例 2:输入:r原创 2021-12-04 11:50:13 · 178 阅读 · 0 评论 -
1005. K 次取反后最大化的数组和
1005. K 次取反后最大化的数组和给你一个整数数组nums和一个整数k ,按以下方法修改该数组:选择某个下标 i并将 nums[i]替换为-nums[i] 。重复这个过程恰好k次。可以多次选择同一个下标i。以这种方式修改数组后,返回数组 可能的最大和 。示例 1:输入:nums = [4,2,3], k = 1输出:5解释:选择下标 1 ,nums 变为 [4,-2,3] 。示例 2:输入:nums = [3,-1,0,2], k = 3输出:6解释:选择下标 (1, 2, 2原创 2021-12-03 22:03:05 · 296 阅读 · 0 评论 -
506. 相对名次
506. 相对名次给你一个长度为 n的整数数组score ,其中 score[i]是第i位运动员在比赛中的得分。所有得分都 互不相同 。运动员将根据得分 决定名次 ,其中名次第 1 的运动员得分最高,名次第 2 的运动员得分第 2 高,依此类推。运动员的名次决定了他们的获奖情况:名次第 1 的运动员获金牌 "Gold Medal" 。名次第 2 的运动员获银牌 "Silver Medal" 。名次第 3 的运动员获铜牌 "Bronze Medal" 。从名次第 4 到第 n 的运动员,只能获得他原创 2021-12-02 23:26:33 · 88 阅读 · 0 评论 -
1446. 连续字符
1446. 连续字符给你一个字符串 s,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。请你返回字符串的能量。class Solution { public int maxPower(String s) { int ans = 1,cnt = 1; for (int i = 1; i < s.length(); ++i) { if (s.charAt(i) == s.charAt(i - 1)) {原创 2021-12-01 23:56:54 · 106 阅读 · 0 评论 -
318. 最大单词长度乘积
318. 最大单词长度乘积给定一个字符串数组 words,找到length(word[i]) * length(word[j])的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。示例 1:输入: ["abcw","baz","foo","bar","xtfn","abcdef"]输出: 16 解释: 这两个单词为 "abcw", "xtfn"。示例 2:输入: ["a","ab","abc","d","cd","bcd","abcd原创 2021-11-30 21:23:07 · 503 阅读 · 0 评论