Loading

摘要: 388. 文件的最长绝对路径 以示例 "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext" ,我们肯定会使用 String.split("\n") 分割字符串,会得到 {dir, \tsubdir1, \tsubdir2, \tfile.ext}。 利用字符串前面'\t 阅读全文
posted @ 2020-10-24 12:24 上海井盖王 阅读(65) 评论(0) 推荐(0)
摘要: 412. Fizz Buzz 常规做法不用解释太多,注意判断逻辑的顺序即可。 // 执行用时: 1 ms , 在所有 Java 提交中击败了 98.56% 的用户 // 内存消耗: 40.1 MB , 在所有 Java 提交中击败了 37.10% 的用户 class Solution { publi 阅读全文
posted @ 2020-10-24 12:23 上海井盖王 阅读(118) 评论(0) 推荐(0)
摘要: 423. 从英文中重建数字 第一次看到到题目时,其实我们的可能没什么思路,不妨观察下列数字: 数字 英文 0 zero 2 two 4 four 6 six 8 eight 这些数字对应的英文单词中有一个有别于其他数字的字母,我们可以通过这些字符出现的次数,计算出这些数字出现的次数,那么剩下的数字怎 阅读全文
posted @ 2020-10-24 12:19 上海井盖王 阅读(154) 评论(0) 推荐(0)
摘要: 451. 根据字符出现频率排序 看到这题,我的第一反应是用一个HashMap记录字符串中字符出现的频率,然后通过重写compare接口实现HashMap依照value的值排序key,最后使用StringBuffer组装新的字符串。具体算法见代码。 // 执行用时: 17 ms , 在所有 Java 阅读全文
posted @ 2020-10-24 12:17 上海井盖王 阅读(97) 评论(0) 推荐(0)
摘要: 492. 构造矩形 直接从$1$开始寻找${L,W}$的组合,这样的效率其实不高。 // 执行耗时:68 ms,击败了20.65% 的Java用户 // 内存消耗:36.3 MB,击败了54.36% 的Java用户 class Solution { public int[] constructRec 阅读全文
posted @ 2020-10-24 12:15 上海井盖王 阅读(88) 评论(0) 推荐(0)
摘要: 506. 相对名次 因为需要找出 \(N\) 名运动员的相对成绩,首先能想到的策略就是 排序,排序的依据应该是 成绩,排序的对象是 成绩所对的下标。 方法一:TreeMap排序成绩 // 执行用时: 12 ms , 在所有 Java 提交中击败了 52.43% 的用户 // 内存消耗: 40 MB 阅读全文
posted @ 2020-10-24 12:12 上海井盖王 阅读(61) 评论(0) 推荐(0)
摘要: 530. 二叉搜索树的最小绝对差 方法一:DFS遍历+暴力搜索 朴素的想法,我们可以前序(中序、后序)遍历整颗二叉树,将数值存入一个ArrayList中,接着再使用两层循环遍历搜索最小的两数之差即可。 // 执行用时: 218 ms , 在所有 Java 提交中击败了 5.52% 的用户 // 内存 阅读全文
posted @ 2020-10-24 12:09 上海井盖王 阅读(97) 评论(0) 推荐(0)
摘要: 535. TinyURL 的加密与解密 方法一:使用内置函数hashcode 我们可以使用Java中内置的hashCode() 来为每个url产生加密结果。同样的,映射结果保存在HashMap以供解码。 一个String对象的hash code的计算方法是这样的: \[ hashcode_{Stri 阅读全文
posted @ 2020-10-24 12:08 上海井盖王 阅读(249) 评论(0) 推荐(0)
摘要: 537.复数乘法 两个复数的运算规则是这样的:\((a_1 + b_1i) * (a_2 + b_2i) = (a_1 * a_2 - b_1 * b_2) + (a_1 * b_2 + a_2 * b_1)i\) 基于这个公式,我们只需要截取获得 String a, String b 中的 a1、 阅读全文
posted @ 2020-10-24 12:06 上海井盖王 阅读(87) 评论(0) 推荐(0)
摘要: // 执行用时: 9 ms , 在所有 Java 提交中击败了 62.23% 的用户 // 内存消耗: 40 MB , 在所有 Java 提交中击败了 58.90% 的用户 class Solution { public int findMinDifference(List timePoints) 阅读全文
posted @ 2020-10-24 12:04 上海井盖王 阅读(72) 评论(0) 推荐(0)
摘要: 551. 学生出勤记录 I 一次遍历,计算字符串中字符‘A’的数量,然后再查看一下是否存在“LLL”子串即可。可以在循环时优化。 方法一:优化一次循环 // 执行用时: 0 ms , 在所有 Java 提交中击败了 100.00% 的用户 // 内存消耗: 36.5 MB , 在所有 Java 提交 阅读全文
posted @ 2020-10-24 12:02 上海井盖王 阅读(32) 评论(0) 推荐(0)
摘要: 844. 比较含退格的字符串 class Solution { public boolean backspaceCompare(String S, String T) { StringBuilder sb1 = new StringBuilder(); StringBuilder sb2 = new 阅读全文
posted @ 2020-10-24 12:00 上海井盖王 阅读(77) 评论(0) 推荐(0)
摘要: 701. 二叉搜索树中的插入操作 二叉搜索树的性质:对于任意节点 \(root\) 而言,左子树(如果存在)上所有节点的值均小于 \(root.val\),右子树(如果存在)上所有节点的值均大于 \(root.val\),且它们都是二叉搜索树。 因此,当将 \(val\) 插入到以 \(root\) 阅读全文
posted @ 2020-10-24 11:59 上海井盖王 阅读(91) 评论(0) 推荐(0)
摘要: 553. 最优除法 本题所考察的是:如何进行字符串拼接。 为了获得最大的除法结果,应该让 被除数 尽可能较大,而 除数 尽可能小,那么仅需要考虑:① 如果 \(nums.length ≤ 2\) 时,输出时应不带括号;② 如果 \(nums.length > 2\) 时,应该在第二位数字前加上左括号 阅读全文
posted @ 2020-10-24 11:57 上海井盖王 阅读(37) 评论(0) 推荐(0)
摘要: 592.分数加减运算 本题的关键点在于如何处理-,并且对于首位分数是否为负需要单独存储。由于最后我们需要对分数进行化简,这里我们手写GCD算法(辗转相除法)求出最大公约数,对分子分母进行化简后拼接字符串即可。 // 执行用时: 7 ms , 在所有 Java 提交中击败了 86.67% 的用户 // 阅读全文
posted @ 2020-10-24 11:52 上海井盖王 阅读(147) 评论(0) 推荐(0)
摘要: 636. 函数的独占时间 使用栈来模拟函数的调用,即在遇到一条包含 start 的日志时,我们将对应的函数 id 入栈;在遇到一条包含 end 的日志时,我们将对应的函数 id 出栈。在每一个时刻,栈中的所有函数均为被调用的函数,而栈顶的函数为正在执行的函数。 依次遍历所有的日志,对于第 i 条日志 阅读全文
posted @ 2020-10-24 11:51 上海井盖王 阅读(93) 评论(0) 推荐(0)
摘要: // 执行用时: 5 ms , 在所有 Java 提交中击败了 93.98% 的用户 // 内存消耗: 38.9 MB , 在所有 Java 提交中击败了 47.30% 的用户 class Solution { public boolean judgeCircle(String moves) { i 阅读全文
posted @ 2020-10-24 11:50 上海井盖王 阅读(96) 评论(0) 推荐(0)
摘要: 682. 棒球比赛 LinkedList 实现了 Queue, Deque, Stack 的功能,只需分别模拟 C, D, + 需要实现的计分规则即可。其中 + 操作可以理解为:先将top弹出,然后计算新栈顶的值为 newTop = top + 当前栈顶值,然后再依次入栈即可。 class Solu 阅读全文
posted @ 2020-10-24 11:48 上海井盖王 阅读(104) 评论(0) 推荐(0)
摘要: 771. 宝石与石头 方法一:双层循环 // 执行用时: 1 ms , 在所有 Java 提交中击败了 99.67% 的用户 // 内存消耗: 37.1 MB , 在所有 Java 提交中击败了 69.25% 的用户 class Solution { public int numJewelsInSt 阅读全文
posted @ 2020-10-24 11:47 上海井盖王 阅读(59) 评论(0) 推荐(0)
摘要: 876. 链表的中间节点 **朴素解法:**这道题最朴素的做法是,先遍历一次,计算链表的长度,进而计算链表中间结点的下标(注意偶数结点的时候,得到的是中间的第二个结点),然后再遍历一次,来到所要求结点的位置。 缺点: 必须先遍历完整个链表,然后才可以「干正事」,再遍历到一半,找到中间结点; 在链表的 阅读全文
posted @ 2020-10-24 11:45 上海井盖王 阅读(139) 评论(0) 推荐(0)
摘要: 925. 长按键入 方法一:双指针 根据题意能够分析得到:字符串 \(typed\) 的每个字符,有且只有两种「用途」: 作为 \(name\) 的一部分。此时会「匹配」\(name\) 中的一个字符 作为长按键入的一部分。此时它应当与前一个字符相同。 如果 \(typed\) 中存在一个字符,它两 阅读全文
posted @ 2020-10-24 11:43 上海井盖王 阅读(84) 评论(0) 推荐(0)
摘要: 977. 有序数组的平方 方法一:快速排序 // 执行用时: 2 ms , 在所有 Java 提交中击败了 66.81% 的用户 // 内存消耗: 40.3 MB , 在所有 Java 提交中击败了 88.74% 的用户 class Solution { public int[] sortedSqu 阅读全文
posted @ 2020-10-24 11:42 上海井盖王 阅读(72) 评论(0) 推荐(0)
摘要: 1002. 查找常用字符 // 执行耗时:3 ms,击败了98.36% 的Java用户 // 内存消耗:38.6 MB,击败了98.01% 的Java用户 class Solution { public List<String> commonChars(String[] A) { int[] min 阅读全文
posted @ 2020-10-24 11:41 上海井盖王 阅读(72) 评论(0) 推荐(0)
摘要: 1290. 二进制链表转整数 方法一:模拟“按权展开求和” 例:\((1011)_2 = 1×2^3+0×2^2+1×2^1+1×2^0=(11)_{10}\) // 执行耗时:1 ms,击败了19.10% 的Java用户 // 内存消耗:36.3 MB,击败了83.14% 的Java用户 clas 阅读全文
posted @ 2020-10-24 11:40 上海井盖王 阅读(118) 评论(0) 推荐(0)
摘要: 357. 计算各个位数不同的数字个数 方法一:动态规划 根据规律,只关心数量,不用遍历到每个有效数字。 // 执行耗时:0 ms,击败了100.00% 的Java用户 // 内存消耗:35.1 MB,击败了92.88% 的Java用户 class Solution { /** * 排列组合:n位有效 阅读全文
posted @ 2020-10-24 11:34 上海井盖王 阅读(126) 评论(0) 推荐(0)
摘要: 328. 奇偶链表 class Solution { public ListNode oddEvenList(ListNode head) { if(head == null){ return null; } ListNode oddStart = head, evenStart = head.ne 阅读全文
posted @ 2020-10-24 11:33 上海井盖王 阅读(80) 评论(0) 推荐(0)
摘要: 299. 猜数字游戏 在一次遍历中进行逐位比较,可以完成的事情有两件:① 两者相同,A++ ② 用一个整型数组作为缓存,当两者不同时,将秘密数字和猜测数字分别缓存,秘密数字的计数位如果为负,说明之前缓存过猜测数字,反之,之前缓存过秘密数字,B++。 // 执行用时: 8 ms , 在所有 Java 阅读全文
posted @ 2020-10-24 11:29 上海井盖王 阅读(101) 评论(0) 推荐(0)
摘要: 240. 二维列表中的查找 方法一:线性查找 线性查找的逻辑巧妙,主要利用了题目中的顺序:“从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序”。这个题解是从左下角开始遍历的,当然从右上角也是可以的。 class Solution { public boolean findNumberIn2 阅读全文
posted @ 2020-10-24 11:28 上海井盖王 阅读(110) 评论(0) 推荐(0)
摘要: 237. 删除链表中的节点 由于我只能访问该节点及其后继链表,我们可以修改当前节点的值和它的指针域。将当前节点的值修改为下一个节点的值,并且让当前节点的指针域指向下下个节点(即跳过真实的node.next)。 class Solution { public void deleteNode(ListN 阅读全文
posted @ 2020-10-24 11:25 上海井盖王 阅读(100) 评论(0) 推荐(0)
摘要: 234. 回文链表 方法一:额外空间+一次遍历 class Solution { public boolean isPalindrome(ListNode head) { List<Integer> list = new ArrayList<>(); while (head != null) { l 阅读全文
posted @ 2020-10-24 11:22 上海井盖王 阅读(59) 评论(0) 推荐(0)
摘要: 227. 基本计算器 II **核心要点:**优先计算*,/运算,将操作化简到只剩+,-。 用continue跳过空格,当然也可以用String.replace(" ","")做一个预处理; 由于是使用循环逐位读取,要注意保证数字完整,然后再根据运算符决定入栈; 如果是加号'+',说明前面的运算独立 阅读全文
posted @ 2020-10-24 11:19 上海井盖王 阅读(109) 评论(0) 推荐(0)
摘要: 225. 用队列实现栈 方法一:单链表实现栈 class MyStack { LinkedList<Integer> stack ; /** Initialize your data structure here. */ public MyStack() { stack = new LinkedLi 阅读全文
posted @ 2020-10-24 11:18 上海井盖王 阅读(80) 评论(0) 推荐(0)
摘要: 224. 基本计算器 由于题目中仅有 +、-、(、) ,在处理 - 时,将其看作是原数 (-1)*operand,那么剩余表达式中就只有 + 运算符,而 + 运算符是遵循结合律的。 每当我们遇到 + 或 - 运算符时,我们首先将表达式求值到左边,然后将正负符号保存到下一次求值。 如果字符是左括号 ( 阅读全文
posted @ 2020-10-24 11:15 上海井盖王 阅读(103) 评论(0) 推荐(0)
摘要: 206. 反转链表 方法一:双指针 定义两个指针:$prev$和$curr$;$curr$在前,$prev$在后。 每次让$curr$的$next$指向$curr$,实现一次局部反转。 局部反转完成之后,$prev$和$curr$同时往前移动一个位置。 循环上述过程,直至$curr$到达链表尾部。 阅读全文
posted @ 2020-10-24 11:14 上海井盖王 阅读(127) 评论(0) 推荐(0)
摘要: 203. 移除链表元素 方法一:设置哨兵节点 如果移除的元素是在链表的中段,那么问题好像不会那么复杂,但删除元素有可能出现在链表的头部,那么问题就可能相对复杂。 可以通过哨兵节点去解决它,哨兵节点广泛应用于树和链表中,如伪头、伪尾、标记等,它们是纯功能的,通常不保存任何数据,其主要目的是使链表标准化 阅读全文
posted @ 2020-10-24 11:12 上海井盖王 阅读(96) 评论(0) 推荐(0)
摘要: 150. 逆波兰表达式求值 将数字依次入栈,由于逆波兰表达式保证了栈内不会为空,所以我们可以将两数的操作结果重新入栈,最终栈内的数字即为运算结果。 // 执行用时: 6 ms , 在所有 Java 提交中击败了 89.98% 的用户 // 内存消耗: 38.7 MB , 在所有 Java 提交中击败 阅读全文
posted @ 2020-10-24 11:11 上海井盖王 阅读(84) 评论(0) 推荐(0)
摘要: 148. 链表排序 class Solution { public ListNode sortList(ListNode head) { // 1、递归结束条件 if (head == null || head.next == null) { return head; } // 2、找到链表中间节点 阅读全文
posted @ 2020-10-24 11:08 上海井盖王 阅读(121) 评论(0) 推荐(0)
摘要: 142. 环形链表II public class Solution { public ListNode detectCycle(ListNode head) { if(head == null){ return null; } ListNode slow = head, fast = head; w 阅读全文
posted @ 2020-10-24 11:07 上海井盖王 阅读(57) 评论(0) 推荐(0)
摘要: 138. 复制带随机指针的链表 方法一:两次哈希表 第一次,用哈希表存放各个节点的值(以创建新节点的方式复制); 第二次,复制各个节点的指向; class Solution { public Node copyRandomList(Node head) { HashMap<Node, Node> h 阅读全文
posted @ 2020-10-24 11:05 上海井盖王 阅读(71) 评论(0) 推荐(0)
摘要: 101.对称二叉树 方法一:递归 对于此题: 递归的点怎么找?从拿到题的第一时间开始,思路如下: 怎么判断一棵树是不是对称二叉树? 答案:如果所给根节点,为空,那么是对称。如果不为空的话,当他的左子树与右子树对称时,他对称。 那么怎么知道左子树与右子树对不对称呢?在这我直接叫为左树和右树。 答案:如 阅读全文
posted @ 2020-10-24 11:03 上海井盖王 阅读(134) 评论(0) 推荐(0)
摘要: 86. 分隔链表 // 执行耗时:0 ms,击败了100.00% 的Java用户 // 内存消耗:37.8 MB,击败了94.44% 的Java用户 class Solution { public ListNode partition(ListNode head, int x) { // 采用328 阅读全文
posted @ 2020-10-24 11:02 上海井盖王 阅读(69) 评论(0) 推荐(0)
摘要: 75. 颜色分类 方法一:计数排序 统计数字$0、1、2$的个数,依次修改即可。 class Solution { public void sortColors(int[] nums) { // Arrays.sort(nums); // 双基准快排 int n = nums.length; int 阅读全文
posted @ 2020-10-24 11:01 上海井盖王 阅读(115) 评论(0) 推荐(0)
摘要: 71. 简化路径 字符串 path 给出了文件的路径,每一级路径前都有 / 做分割,不难想到使用 path.split("\\/")方法对路径做一个预处理分割,接着再遍历分割后的字符串数组,将路径名存入栈中,.. 即模拟出栈,"", "." 不进行处理即可。 class Solution { pub 阅读全文
posted @ 2020-10-24 10:59 上海井盖王 阅读(74) 评论(0) 推荐(0)
摘要: 32. 最长有效括号 栈可以我们在遍历给定字符串的过程中去判断到目前为止扫描的子串的有效性,同时能得到最长有效括号的长度。 具体做法是我们始终保持栈底元素为当前已经遍历过的元素中「最后一个没有被匹配的右括号的下标」,这样的做法主要是考虑了边界条件的处理,栈里其他元素维护左括号的下标: 对于遇到的每个 阅读全文
posted @ 2020-10-24 10:58 上海井盖王 阅读(90) 评论(0) 推荐(0)
摘要: 29. 两数相除 方法一:递归 举一个朴素的🌰:$11 ÷ 3$。 首先 11 比 3 大,那么结果至少是1,然后让除数3翻倍得6,发现11比3翻倍后还要大,那么结果就至少是2了,那我让这个6再翻倍得12,11不比12大,差点让就让刚才的最小解2也翻倍得到4了。但是我知道最终结果肯定在2和4之间。 阅读全文
posted @ 2020-10-24 10:57 上海井盖王 阅读(990) 评论(0) 推荐(0)
摘要: 21. 合并两个有序链表 class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode sentinel = new ListNode(-1); ListNode curr = sentinel 阅读全文
posted @ 2020-10-24 10:52 上海井盖王 阅读(97) 评论(0) 推荐(0)
摘要: 20. 有效的括号 本题使用一个栈,在遍历过程中存放左括号;再使用一个哈希表,将左括号与右括号构成键值对,这样可以简化左括号出栈的判断逻辑。然后使用一个循环遍历s,如果为左括号则入栈,如果在栈不为空的情况下,前一个左括号的所对的右括号就是当前遍历的右括号,则允许出栈,否则可直接返回false,因为没 阅读全文
posted @ 2020-10-24 10:49 上海井盖王 阅读(91) 评论(0) 推荐(0)
摘要: 18. 四数之和 下面是可稍作修改就应用于 15. 三数之和 的模板。 //执行耗时:28 ms,击败了18.19% 的Java用户 //内存消耗:38.9 MB,击败了91.90% 的Java用户 class Solution { public List<List<Integer>> fourSu 阅读全文
posted @ 2020-10-24 10:44 上海井盖王 阅读(80) 评论(0) 推荐(0)
摘要: 15. 三数之和 方法一:排序+双指针 不重复的要求使我们不能无脑地使用三重循环枚举所有三元组。举个例子,数组中所有元素都为0,即: [0, 0, 0, 0, 0, 0, 0, 0, ..., 0, 0] 这种方法的时间复杂度仍然为 \(O(N^3)\),,毕竟我们还是没有跳出三重循环的大框架。然而 阅读全文
posted @ 2020-10-24 10:43 上海井盖王 阅读(103) 评论(0) 推荐(0)
摘要: 13. 罗马数字转整数 单位罗马数字转整数可以用一个函数或者用一个哈希表实现。在核心实现思路中,逐位比较前一位数 \(preNum\) 与 当前位数 \(num\) 的大小,如果前者比后者大,则累加到 \(ans\) 上,反之,则累减到 \(ans\) 上。别忘了最后要加上 \(preNum\) 。 阅读全文
posted @ 2020-10-24 10:42 上海井盖王 阅读(66) 评论(0) 推荐(0)
摘要: 9. 回文数 // 执行耗时:9 ms,击败了99.19% 的Java用户 // 内存消耗:38.2 MB,击败了62.03% 的Java用户 class Solution { public boolean isPalindrome(int x) { if (x < 0){ return false 阅读全文
posted @ 2020-10-24 10:40 上海井盖王 阅读(117) 评论(0) 推荐(0)
摘要: 1. 两数之和 看到这道题的你,也许是第一次接触力扣,如果那么用两层嵌套循环去寻找答案可能是你能尽快接受的一种思路,但你应该尽快的了解已经更为高效的做法——一遍哈希表。 具体而言,HashMap的查询效率高,用一个HashMap记录数组中的一个数和它的下标,那么在遍历寻找 target - nums 阅读全文
posted @ 2020-10-24 10:38 上海井盖王 阅读(93) 评论(0) 推荐(0)
摘要: 1024. 视频拼接 在2020年10月24日程序员节遇见这道题!祝天下的程序员节日快乐! 方法一:贪心算法 对于某一个视频片段clips[i],最佳的决策就是找一个能与clips[i]有交集,且结束时间尽量靠后的一个clips[j],然后在以该片段的结束时间clips[j][1]为基准,再做类似的 阅读全文
posted @ 2020-10-24 09:37 上海井盖王 阅读(133) 评论(0) 推荐(0)