java
文章平均质量分 90
death05
这个作者很懒,什么都没留下…
展开
-
设计模式——单例模式
关于单例模式,这是面试时最容易遇到的问题。当时以为很简单的内容,深挖一下,也可以关联出类加载、序列化等知识。饿汉式我们先来看看基本的饿汉式写法:public class Hungry { private static final Hungry instance = new Hungry(); private Hungry() {} public Hungry ...原创 2020-03-06 14:17:31 · 390 阅读 · 2 评论 -
力扣739——每日温度
这道题主要是找规律,优化的时候可以利用数据结构的特性(数组和栈)。原题根据每日气温列表,请重新生成一个列表,对应位置的输入是你需要再等待多久,温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用0 来代替。例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0...原创 2020-02-24 14:08:14 · 1305 阅读 · 0 评论 -
力扣621——任务调度器
这道题主要是找规律,优化的时候可以采用贪心算法的思想。原题给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。然而,两个相同种类的任务之间必须有长度为n 的冷却时间,因此至少有连续 n 个单...原创 2020-02-21 10:38:11 · 1249 阅读 · 0 评论 -
力扣560——和为K的子数组
这道题主要是找规律,优化的时候可以利用哈希表和数组的特性。原题给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数k的范围...原创 2020-02-19 09:40:17 · 1175 阅读 · 0 评论 -
力扣494——目标和
这道题主要是利用动态规划进行求解,优化的时候可以找规律,转化成正常的背包问题。原题给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号+和-。对于数组中的任意一个整数,你都可以从+或-中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:输入: nums: [1, 1, 1, 1, 1], S: 3...原创 2020-02-18 13:24:55 · 946 阅读 · 0 评论 -
力扣438——找到字符串中所有字母异位词
这道题主要是利用"窗口"这一概念,优化的时候可以利用题目本身的特殊性。原题给定一个字符串s和一个非空字符串p,找到s中所有是p的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串s和 p的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。示例1:输入:s: "cbaebabac...原创 2020-02-11 15:45:50 · 1056 阅读 · 0 评论 -
力扣416——分割等和子集
这道题主要涉及的是动态规划,类似背包问题,主要还是需要找出状态转移方程,优化时可以考虑采用深度优先搜索。原题给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和...原创 2020-02-04 21:53:17 · 1138 阅读 · 0 评论 -
力扣406——根据身高重建队列
这道题主要涉及的是找规律和快速排序,优化时需要考虑 Java 中数据结构的特性。原题假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:...原创 2020-02-03 20:22:30 · 1080 阅读 · 0 评论 -
力扣399——除法求值
这道题主要涉及的是对树的理解,相关的算法是BFS、DFS、并查集。原题给出方程式A / B = k, 其中A 和B 均为代表字符串的变量,k 是一个浮点型数字。根据已知方程式求解问题,并返回计算结果。如果结果不存在,则返回-1.0。示例 :给定a / b = 2.0, b / c = 3.0问题: a / c = ?, b / a = ?, a / e = ?, a / a ...原创 2020-02-03 15:50:28 · 1013 阅读 · 0 评论 -
力扣399——除法求值
这道题主要涉及的是对树的理解,相关的算法是BFS、DFS、并查集。原题给出方程式A / B = k, 其中A 和B 均为代表字符串的变量,k 是一个浮点型数字。根据已知方程式求解问题,并返回计算结果。如果结果不存在,则返回-1.0。示例 :给定a / b = 2.0, b / c = 3.0问题: a / c = ?, b / a = ?, a / e = ?, a / a ...原创 2020-02-02 22:24:21 · 253 阅读 · 0 评论 -
力扣394——字符串解码
这道题主要涉及的是对递归和栈的理解。原题给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 ...原创 2020-02-01 13:49:45 · 1304 阅读 · 0 评论 -
力扣347——前 K 个高频元素
这道题主要涉及的是对数据结构里哈希表、小顶堆的理解,优化时可以参考一些排序方法。原题给定一个非空的整数数组,返回其中出现频率前k高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的k总是合理的,且 1 ≤ k ≤ 数组中不相同的元...原创 2020-01-31 21:48:06 · 1140 阅读 · 1 评论 -
力扣337——打家劫舍 III
这一篇也是基于"打家劫舍"的扩展,需要针对特殊情况特殊考虑,当然其本质还是动态规划,优化时需要考虑数据结构。原题在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被...原创 2020-01-25 09:59:25 · 1017 阅读 · 0 评论 -
力扣213——打家劫舍 II
这一篇是上一篇的扩展,需要针对特殊情况特殊考虑,当然其本质还是动态规划。原题你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷...原创 2020-01-24 13:14:11 · 1128 阅读 · 0 评论 -
力扣198——打家劫舍
这次准备连讲三道题,这道题就是最基础的,利用动态规划可以解决。原题你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 :输入: [1,2,3,1]输出:...原创 2020-01-20 21:12:57 · 987 阅读 · 0 评论 -
力扣322——零钱兑换
这道题主要涉及动态规划,利用这个,就能很好解决这个问题。原题给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。示例1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 5 1示例 2:输入: coins =...原创 2020-01-16 21:37:46 · 1136 阅读 · 0 评论 -
力扣309——最佳买卖股票时机含冷冻期
这道题主要涉及状态转移方程,想清楚所有状态后,就可以轻松解决。原题给定一个整数数组,其中第i个元素代表了第i天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,...原创 2020-01-14 20:48:00 · 1016 阅读 · 0 评论 -
力扣300——最长上升子序列
这道题主要涉及动态规划,优化时可以考虑贪心算法和二分查找。原题给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为O(n2) 。进阶: 你...原创 2020-01-13 21:59:11 · 1166 阅读 · 0 评论 -
力扣287——寻找重复数
这道题主要就是找规律,基于之前142题环形链表II的规律,就能解决了。原题给定一个包含n 1 个整数的数组nums,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组...原创 2020-01-12 17:36:23 · 1066 阅读 · 0 评论 -
力扣279——完全平方数
这道题主要利用广度优先搜索进行动态规划,就可以解决了,也可以推导出关系解决。原题给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例1:输入: n = 12输出: 3 解释: 12 = 4 4 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 9.原题u...原创 2020-01-11 19:45:30 · 573 阅读 · 0 评论 -
力扣240——搜索二维矩阵
这道题主要是利用搜索二维矩阵本身的特性,找到其中的规律,就可以解决了。原题编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], ...原创 2020-01-10 18:13:29 · 1233 阅读 · 0 评论 -
力扣221——最大正方形
这道题主要是利用动态规划,注意好边界条件,就可以解决。原题在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4原题url:https://leetcode-cn.com/problems/maximal-square/解题动态规划这道题应...原创 2020-01-09 19:22:08 · 1109 阅读 · 0 评论 -
力扣208——实现 Trie (前缀树)
这道题主要是构造前缀树节点的数据结构,帮助解答问题。原题实现一个 Trie (前缀树),包含insert,search, 和startsWith这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回...原创 2020-01-08 09:47:07 · 1713 阅读 · 0 评论 -
力扣207——课程表
这道题主要利用拓扑排序,判断该图是否有环,其中还会涉及到邻接矩阵。原题现在你总共有 n 门课需要选,记为0到n-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]] 输出: true解释:总共有 ...原创 2020-01-07 09:21:05 · 1204 阅读 · 0 评论 -
力扣152——乘积最大子序列
这道题主要就是利用动态规划进行解答,如果要进行优化,就需要找规律了。原题给定一个整数数组 nums,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释:子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释:结果不能为 2, 因为 [-2,-1] 不是子数组。原题url:h...原创 2020-01-06 09:33:46 · 952 阅读 · 0 评论 -
力扣148——排序链表
原题在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5原题url:https://leetcode-cn.com/probl...原创 2020-01-05 10:36:07 · 1652 阅读 · 0 评论 -
力扣142——环形链表 II
原题给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index ...原创 2020-01-04 08:09:33 · 979 阅读 · 0 评论 -
力扣139——单词拆分
原题给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode"...原创 2020-01-03 09:49:10 · 996 阅读 · 2 评论 -
力扣105——从前序与中序遍历序列构造二叉树
原题根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7原题url:https://leetcode-cn....原创 2020-01-02 09:30:12 · 921 阅读 · 0 评论 -
力扣96——不同的二叉搜索树
原题给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 ...原创 2020-01-01 10:57:32 · 989 阅读 · 0 评论 -
力扣90——子集 II
原题给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]原题url:https://leetcode-cn.com/problems/subsets-ii/解题递归这道题,针对已经刷...原创 2019-12-31 10:06:10 · 1258 阅读 · 0 评论 -
力扣89——格雷编码
原题格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。示例 1:输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的 n,其格雷编码序列并不唯一。例如,[0,2,3,1] 也是一个有效的格雷编码序列。00 -...原创 2019-12-30 13:35:02 · 1162 阅读 · 0 评论 -
力扣86——分隔链表
原题给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5原题url:https://leetcode-cn.com/p...原创 2019-12-29 10:20:42 · 922 阅读 · 0 评论 -
力扣80——删除排序数组中的重复项 II
原题给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中超出新长度...原创 2019-12-28 09:57:34 · 925 阅读 · 0 评论 -
力扣79——单词搜索
原题给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = "ABCCED...原创 2019-12-27 09:35:15 · 994 阅读 · 0 评论 -
力扣77——组合
原题给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]原题url:https://leetcode-cn.com/problems/combinations/解题递归获取一开始的想法就是遍历递...原创 2019-12-26 09:40:05 · 420 阅读 · 0 评论 -
力扣75——颜色分类
原题给定一个包含红色、白色和蓝色,一共n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:* 一个直观的解决方案是使用计数排序的两趟扫描算法。...原创 2019-12-25 09:30:51 · 1126 阅读 · 0 评论 -
力扣74——搜索二维矩阵
原题编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3输出: true示例 2:输...原创 2019-12-24 09:47:18 · 946 阅读 · 0 评论 -
力扣60——第k个排列
原题给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:1. "123"2. "132"3. "213"4. "231"5. "312"6. "321"给定 n 和 k,返回第 k 个排列。说明:给定 n 的范围是 [1, 9]。给定 k 的范围是[1, n!]。示例 1:...原创 2019-12-23 09:48:34 · 1051 阅读 · 0 评论 -
力扣64——最小路径和
原题给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。解法错误的正向思路我一开始的想法是正向思路,从起点开始,每个点都有两种后续走法——向下或...原创 2019-12-23 09:45:19 · 895 阅读 · 0 评论