Leetcode
刷题
十七天
这个作者很懒,什么都没留下…
展开
-
363. 矩形区域不超过 K 的最大数值和
给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。题目数据保证总会存在一个数值和不超过 k 的矩形区域。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/max-sum-of-rectangle-no-larger-than-k著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution { public int maxSumSu原创 2021-09-07 09:28:28 · 148 阅读 · 0 评论 -
225. 用队列实现栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size原创 2021-05-10 22:21:15 · 138 阅读 · 0 评论 -
554. 砖墙
你的面前有一堵矩形的、由 n 行砖块组成的砖墙。这些砖块高度相同(也就是一个单位高)但是宽度不同。每一行砖块的宽度之和应该相等。你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖.你不能沿着墙的两个垂直边缘之一画线,这样显然是没有穿过一块砖的。给你一个二维数组 wall ,该数组包含这堵墙的相关信息。其中,wall[i] 是一个代表从左至右每块砖的宽度的数组。你需要找出怎样画才能使这条线 穿过的砖块数量最少 ,并且返回 穿过的砖块数量 。来源:力扣(.原创 2021-05-04 15:19:46 · 45 阅读 · 0 评论 -
690. 员工的重要性
给定一个保存员工信息的数据结构,它包含了员工 唯一的 id ,重要度和 直系下属的 id 。比如,员工 1 是员工 2 的领导,员工 2 是员工 3 的领导。他们相应的重要度为 15 , 10 , 5 。那么员工 1 的数据结构是 [1, 15, [2]] ,员工 2的 数据结构是 [2, 10, [3]] ,员工 3 的数据结构是 [3, 5, []] 。注意虽然员工 3 也是员工 1 的一个下属,但是由于 并不是直系 下属,因此没有体现在员工 1 的数据结构中。现在输入一个公司的所有员工信息,以及单个.原创 2021-05-04 15:12:11 · 65 阅读 · 0 评论 -
137. 只出现一次的数字 II
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。链接:https://leetcode-cn.com/problems/single-number-ii/ //方法1:先对数组进行排序,然后进行二分查找,如果连续三个数字相等,说明唯一的数字在后半部分, //如果三个数字中的第一个和它的前一个数字相等,说明唯一的元素就在前半部分,否则它就是唯一的元素 public int singleNumber(..原创 2021-05-04 15:03:49 · 46 阅读 · 0 评论 -
633 平方数之和
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = chttps://leetcode-cn.com/problems/sum-of-square-numbers/ //方法1:从0开始遍历到sqrt(c),如果sqrt(c - i * i)是整数,说明可以表示为两个整数的和 public boolean judgeSquareSum1(int c) { int s = (int)Math.sqrt(c); for .原创 2021-04-28 21:33:54 · 40 阅读 · 0 评论 -
1011.在D天内送达包裹的能力
传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i个包裹的重量为weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/capacity-to-ship-packages-within-d-days //方法1:在不考虑几天运完的时候,最...原创 2021-04-27 16:35:15 · 106 阅读 · 0 评论 -
938. 二叉搜索树的范围和
给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。https://leetcode-cn.com/problems/range-sum-of-bst/ //方法1.对于二叉搜索树,一个节点的左子树都小于它,右子树都大于它,所以如果节点的值小于low,就只考虑右子树, //若节点的值大于high,就只考虑它的左子树。 public int rangeSumBST1(TreeNode root, int low, int high).原创 2021-04-27 16:05:11 · 38 阅读 · 0 评论 -
357. 计算各个位数不同的数字个数
给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10^nhttps://leetcode-cn.com/problems/count-numbers-with-unique-digits///1.动态规划法,对于i位数字的数来说,如果前i-1位有重复,那么第i位(最低位)放0-9都会重复,得到重复数字dp[i - 1] * 10个;//如果前i-1位没有重复,共有9 * 10 ^ (i - 2) - dp[i - 1]种可能,这时第i位放前i-1位中数字的一原创 2021-04-27 16:00:59 · 78 阅读 · 0 评论 -
递增顺序搜索树
给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。链接:https://leetcode-cn.com/problems/increasing-order-search-tree/思路:新建一个树,按中序遍历的顺序依次把二叉搜索树的节点加到新树上。 public TreeNode increasingBST(TreeNode root) { dfs(root); .原创 2021-04-27 15:53:17 · 104 阅读 · 0 评论 -
最大整除子集
给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足:answer[i] % answer[j] == 0 ,或answer[j] % answer[i] == 0如果存在多个有效解子集,返回其中任何一个均可。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/largest-divisible-subset思...原创 2021-04-25 15:11:09 · 97 阅读 · 0 评论 -
组合总和 Ⅳ
给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combination-sum-iv思路:用dp[i](0 <= i <= target)表示:用数组中的元素表示i,共有几种组合方式。在一个组合中,假设最后一个元素是num,那这种情况下表...原创 2021-04-25 12:27:18 · 45 阅读 · 0 评论 -
解码
一条包含字母A-Z 的消息通过以下映射进行了 编码 :'A' -> 1'B' -> 2...'Z' -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为:"AAJF" ,将消息分组为 (1 1 10 6)"KJF" ,将消息分组为 (11 10 6)注意,消息不能分组为(1 11 06) ,因为 "06" 不能映射为 "F" ,这是由于 "6" 和 "06" 在映射中并不等...原创 2021-04-22 09:13:46 · 103 阅读 · 0 评论 -
移除元素
给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-element//双指针,i遍历整个数组,count统计有效元素的个数 public int removeElem...原创 2021-04-19 17:09:11 · 45 阅读 · 0 评论 -
搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。链接:https://leetcode-cn.com/problems/search-insert-position/找第一个大于等于target的元素public int searchInsert1(int[] nums, int target) { if (nums.length == 0){ retur.原创 2021-04-19 17:07:27 · 45 阅读 · 0 评论 -
存在重复元素3
给你一个整数数组 nums 和两个整数k 和 t 。请你判断是否存在 两个不同下标 i 和 j,使得abs(nums[i] - nums[j]) <= t ,同时又满足 abs(i - j) <= k 。如果存在则返回 true,不存在返回 false。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/contains-duplicate-iii思路:寻找在[i - k, i + k]范围内是否存在j,满足nums[i] ...原创 2021-04-19 17:04:08 · 38 阅读 · 0 评论 -
前缀树
Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。boolean start...原创 2021-04-15 19:57:46 · 32 阅读 · 0 评论 -
打家劫舍2
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,能够偷窃到的最高金额。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/house-robber-ii//第一间房屋和最后..原创 2021-04-15 19:09:56 · 44 阅读 · 0 评论 -
打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/house-robber//动态规划,利用sum[]存储前k个房间偷窃到的最高金额(但不能表示有没有偷..原创 2021-04-15 19:08:02 · 36 阅读 · 0 评论 -
二叉搜索树节点最小距离
给你一个二叉搜索树的根节点 root ,返回树中任意两不同节点值之间的最小差值。链接:https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/思路:二叉搜索树中序遍历得到的值序列是递增有序的,只要计算相邻元素的差并取最小值即可//方法1:pre记录上一个节点的val,res记录当前的最小值,计算当前节点的val与pre的差,若小于res,就令res更新为这个差值,并更新pre为当前节点的val int pre原创 2021-04-13 20:01:27 · 89 阅读 · 0 评论 -
丑数2
给你一个整数 n ,请你找出并返回第 n 个 丑数 .丑数 就是只包含质因数 2、3 和/或 5 的正整数。链接:https://leetcode-cn.com/problems/ugly-number-ii///方法1:优先队列(小根堆) PriorityQueue<Long> p = new PriorityQueue<>(); //存储从小到大的丑数,整形会溢出,所以采用Long型 Set<Long> set =原创 2021-04-11 21:56:00 · 46 阅读 · 0 评论 -
栈排序
栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek返回 -1。链接:https://leetcode-cn.com/problems/sort-of-stacks-lcci/class SortedStack { Stack<Integer> s1; /.原创 2021-04-11 21:31:51 · 403 阅读 · 0 评论 -
丑数
给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。丑数 就是只包含质因数2、3 和/或5的正整数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/ugly-numberpublic static boolean isUgly1(int n) { if(n <= 0){ return false; } ...原创 2021-04-11 21:20:50 · 58 阅读 · 0 评论 -
包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。链接:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/class MinStack { Stack<Integer> s1; //存储压入的元素 Stack<Integer> s2; .原创 2021-04-11 21:17:42 · 40 阅读 · 0 评论 -
栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcofpublic static boole..原创 2021-04-11 20:54:31 · 76 阅读 · 0 评论 -
寻找旋转数组中最小值2
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,4,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,4]若旋转 7 次,则可以得到 [0,1,4,4,5,6,7]注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。给你一个可能存在 重复 元...原创 2021-04-09 15:59:29 · 62 阅读 · 0 评论 -
两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof//栈:先进后出,队列:先进先出,用两个栈倒一下顺序就可class CQueue {...原创 2021-04-08 22:11:30 · 46 阅读 · 0 评论 -
寻找旋转数组中的最小值
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7]在变化后可能得到:若旋转 3 次,则可以得到 [4,5,6,7,0,1,2]注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。给你一个元素值 互不相同 的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行...原创 2021-04-08 11:02:57 · 117 阅读 · 0 评论 -
两数相加
给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-two-numberspublic ListNode addTwoNumbers(ListNode l1, ListNode l2) { ...原创 2021-04-08 10:56:22 · 42 阅读 · 0 评论 -
旋转链表
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。https://leetcode-cn.com/problems/rotate-list///方法1:先把链表形成环,在第n - 1 -(k % n)个节点的后面断开, public ListNode rotateRight1(ListNode head, int k) { if (head == null){ return null; }原创 2021-04-07 19:08:57 · 39 阅读 · 0 评论 -
移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。https://leetcode-cn.com/problems/remove-linked-list-elements///方法1:造一个哨兵节点指向头节点,把Node.val == val 的节点删除,返回哨兵节点的next public ListNode removeElements1(ListNode head, int val) {原创 2021-04-07 19:05:29 · 133 阅读 · 0 评论 -
合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。https://leetcode-cn.com/problems/merge-two-sorted-lists///方法1:新建一个链表,选择两个链表的待插入节点中较小的那个节点插入新链表的尾部 public ListNode mergeTwoLists2(ListNode l1, ListNode l2) { if (l1 == null){ return原创 2021-04-07 18:57:01 · 37 阅读 · 0 评论 -
斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。来源:力扣(LeetCode)链接:https://leetcode-...原创 2021-04-07 18:46:32 · 58 阅读 · 0 评论 -
快乐数
编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为1,那么这个数就是快乐数。如果 n 是快乐数就返回 true ;不是,则返回 false 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/happy-number思路:找几个数试一下,发现如果不是快乐数,平...原创 2021-04-07 18:37:48 · 89 阅读 · 0 评论 -
从尾到头遍历链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。//方法1:计算链表的长度,造数组,从数组尾部开始添加元素 public int[] reversePrint1(ListNode head) { if (head == null){ return new int[0]; } ListNode temp = head; int count = 0; while(temp原创 2021-04-07 17:31:22 · 599 阅读 · 0 评论 -
环形链表的入环节点
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。链接:https://leetcode-cn.com/problems/linked-list-cycle-ii//快慢指针 public Node detectCy...原创 2021-04-07 17:23:50 · 133 阅读 · 0 评论 -
环形链表
给定一个链表,判断链表中是否有环。https://leetcode-cn.com/problems/linked-list-cycle/class HasCircle{ //Set集合:遍历链表,将指针到过的元素加入set,如果set中有重复,说明链表有环 public boolean hasCycle2(ListNode head) { if (head == null){ return false; }原创 2021-04-02 21:38:05 · 43 阅读 · 0 评论 -
外观数列
给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = "1"countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnpvdm/1. ...原创 2021-04-02 21:34:44 · 85 阅读 · 0 评论 -
二维矩阵的旋转
给定一个 n×n 的二维矩阵matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnhhkv/思路:对于某个坐标为(i,j)的元素,经过旋转,它应该到为(j,n-1-i)的位置,坐标为(j,n-1-i) 的元素到(n-1-i,n-1-j),坐标为...原创 2021-04-02 21:30:09 · 413 阅读 · 0 评论 -
数组表示的整数加1
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2cv1c/class PlusOne{ public int[] plusOne1(int[] digits) { digits[dig...原创 2021-04-02 21:16:11 · 450 阅读 · 0 评论