自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 收藏
  • 关注

转载 LeetCode377-组合总和 Ⅳ

题目给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。输入:nums = [1,2,3], target = 4输出:7解释:所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。输入:nums = [9], targe

2021-09-17 15:30:29 199

转载 LeetCode319-灯泡开关

题目初始时有 n 个灯泡处于关闭状态。对某个灯泡切换开关意味着:如果灯泡状态为关闭,那该灯泡就会被开启;而灯泡状态为开启,那该灯泡就会被关闭。第 1 轮,每个灯泡切换一次开关。即,打开所有的灯泡。第 2 轮,每两个灯泡切换一次开关。 即,每两个灯泡关闭一个。第 3 轮,每三个灯泡切换一次开关。第 i 轮,每 i 个灯泡切换一次开关。 而第 n 轮,你只切换最后一个灯泡的开关。找出 n 轮后有多少个亮着的灯泡。输入:n = 3输出:1解释:初始时, 灯泡状态 [关闭, 关闭, 关闭].

2021-08-31 17:01:42 182

转载 LeetCode1109-航班预订统计

题目这里有 n 个航班,它们分别从 1 到 n 进行编号。有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti (包含 firsti 和 lasti )的 每个航班 上预订了 seatsi 个座位。请你返回一个长度为 n 的数组 answer,其中 answer[i] 是航班 i 上预订的座位总数。示例一:输入:bookings = [[1,2,10],[2,3,20],

2021-08-31 15:07:27 193

转载 LeetCode581-最短无序连续子数组

题目给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。输入:nums = [2,6,4,8,10,9,15]输出:5解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。输入:nums = [1,2,3,4]输出:0解法三次遍历class Solution { public int findUnsortedSuba

2021-08-18 01:39:17 142

原创 《Redis设计与实现》阅读笔记——数据结构与对象

简单动态字符串redis的底层是C语言,但是没有简单的使用C语言传统的以空字符结尾的字符数组表示字符串。使用的是SDS表示字符串。struct sdshdr { //记录buf数组中已经使用的字节数量,等于SDS保存字符串长度(去除了结尾空字符串) int len; //记录buf中未使用的字节的数量 int free; //字节数组,保存字符串 char buff[];}1.1 SDS与C字符串区别常数复杂度获取字符串长度杜绝缓冲区溢出对buff进行操作的时候,若剩余空间不够,

2021-08-15 19:13:09 75

转载 LeetCode1838-最高频元素的频数

题目元素的 频数 是该元素在一个数组中出现的次数。给你一个整数数组 nums 和一个整数 k 。在一步操作中,你可以选择 nums 的一个下标,并将该下标对应元素的值增加 1 。执行最多 k 次操作后,返回数组中最高频元素的 最大可能频数 。示例 1:输入:nums = [1,2,4], k = 5 输出:3 解释:对第一个元素执行 3 次递增操作,对第二个元素执 2 次递增操作,此时nums = [4,4,4] 。 4 是数组中最高频元素,频数是 3 。示例 2:输入:nums =

2021-07-20 00:39:11 182

转载 LeetCode1818-绝对差值和

题目给你两个正整数数组 nums1 和 nums2 ,数组的长度都是 n 。数组 nums1 和 nums2 的 绝对差值和 定义为所有 |nums1[i] - nums2[i]|(0 <= i < n)的 总和(下标从 0 开始)。你可以选用 nums1 中的 任意一个 元素来替换 nums1 中的 至多 一个元素,以 最小化 绝对差值和。在替换数组 nums1 中最多一个元素 之后 ,返回最小绝对差值和。因为答案可能很大,所以需要对 109 + 7 取余 后返回。|x| 定义为:

2021-07-14 01:07:58 177

转载 LeetCode1711-大餐计数

题目大餐 是指 恰好包含两道不同餐品 的一餐,其美味程度之和等于 2 的幂。你可以搭配 任意 两道餐品做一顿大餐。给你一个整数数组 deliciousness ,其中 deliciousness[i] 是第 i​​​​​​​​​​​​​​ 道餐品的美味程度,返回你可以用数组中的餐品做出的不同 大餐 的数量。结果需要对 109 + 7 取余。注意,只要餐品下标不同,就可以认为是不同的餐品,即便它们的美味程度相同。示例 1:输入:deliciousness = [1,3,5,7,9]输出:4解

2021-07-07 01:09:56 71

转载 LeetCode LCP 07-传递信息

题目小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下:有 n 名玩家,所有玩家编号分别为 0 ~ n-1,其中小朋友 A 的编号为 0每个玩家都有固定的若干个可传信息的其他玩家(也可能没有)。传信息的关系是单向的(比如 A 可以向 B 传信息,但 B 不能向 A 传信息)。每轮信息必须需要传递给另一个人,且信息可重复经过同一个人给定总玩家数 n,以及按 [玩家编号,对应可传递玩家编号] 关系组成的二维数组 relation。返回信息从小 A (编号 0 ) 经过 k 轮传递到编号为 n

2021-07-03 00:14:39 199

转载 LeetCode1833-雪糕的最大数量

题目夏日炎炎,小男孩 Tony 想买一些雪糕消消暑。商店中新到 n 支雪糕,用长度为 n 的数组 costs 表示雪糕的定价,其中 costs[i] 表示第 i 支雪糕的现金价格。Tony 一共有 coins 现金可以用于消费,他想要买尽可能多的雪糕。给你价格数组 costs 和现金量 coins ,请你计算并返回 Tony 用 coins 现金能够买到的雪糕的 最大数量 。注意:Tony 可以按任意顺序购买雪糕。示例 1:输入:costs = [1,3,2,4,1], coins = 7输

2021-07-02 01:25:32 174

转载 LeetCode494-目标和

题目给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标和为 3 。-1

2021-06-28 00:52:58 98

原创 LeetCode410-分割数组的最大值

题目给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。输入:nums = [7,2,5,10,8], m = 2输出:18解释:一共有四种方法将 nums 分割为 2 个子数组。 其中最好的方式是将其分为 [7,2,5] 和 [10,8] 。因为此时这两个子数组各自的和的最大值为18,在所有情况中最小。解法解法一:dp将数组分割成m段是 dp的常用问法class Solution {

2021-06-16 01:24:43 89

转载 LeetCode1738-找出第 K 大的异或坐标值

题目给你一个二维矩阵 matrix 和一个整数 k ,矩阵大小为 m x n 由非负整数组成。矩阵中坐标 (a, b) 的 值 可由对所有满足 0 <= i <= a < m 且 0 <= j <= b < n 的元素 matrix[i][j](下标从 0 开始计数)执行异或运算得到。请你找出 matrix 的所有坐标中第 k 大的值(k 的值从 1 开始计数)。输入:matrix = [[5,2],[1,6]], k = 1输出:7解释:坐标 (0,1)

2021-05-28 00:33:09 67

转载 LeetCode461-汉明距离

题目两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:解法解法一:会循环30次public int hammingDistance(int x, int y) { int res = 0; int a = x ^ y; int flag = 1 << 30; while(flag > 0)

2021-05-27 22:40:39 55

转载 LeetCode1143-最长公共子序列 与LeetCode1035-不相交的线

题目1143给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。输入:text1 = “abcde”, text2 = “a

2021-05-24 14:42:57 88

转载 LeetCode127-单词接龙

LeetCode127-单词接龙题目给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。输入:beginWord = “

2020-10-23 01:23:46 96

转载 LeetCode763-划分字母区

LeetCode763-划分字母区题目字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。输入:S = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “ababcbaca”, “defegde”, “hijhklij”。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。

2020-10-22 19:46:25 187

转载 LeetCode117-填充每个节点的下一个右侧节点指针 II

LeetCode117-填充每个节点的下一个右侧节点指针 II题目给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。解法class Solution { public Node connect(Node

2020-10-15 23:27:47 256

转载 LeetCode116-填充每个节点的下一个右侧节点指针

LeetCode116-填充每个节点的下一个右侧节点指针题目给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。解法这是完美二叉树class Sol

2020-10-15 23:05:28 61

转载 面试题 01.07. 旋转矩阵

面试题 01.07. 旋转矩阵题目给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?解法先将矩阵上下对换,然后按照左上到右下的对角线为轴进行对换。class Solution { public void rotate(int[][] matrix) { int N = matrix.length; if(N == 0) return; //上下互换

2020-10-07 19:57:39 100

转载 剑指 Offer 68 - II. 二叉树的最近公共祖先

剑指 Offer 68 - II. 二叉树的最近公共祖先题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”解法class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q)

2020-10-05 20:08:30 47

转载 剑指 Offer 66. 构建乘积数组

题目给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。输入: [1,2,3,4,5]输出: [120,60,40,30,24]解法class Solution { public int[] constructArr(int[] a) { if(a.length == 0) return new int[0];

2020-10-05 19:01:30 50

转载 剑指 Offer 65. 不用加减乘除做加法

剑指 Offer 65. 不用加减乘除做加法题目写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。提示:a, b 均可能是负数或 0结果不会溢出 32 位整数解法使用位运算。假设a、b都是某一位二进制位,那么n是非进位和,c是进位,则n和c的运算方式为n = a ^ bc = (a&b)<<1所以a+b = n+cclass Solution { public int add(int a, int b)

2020-10-05 18:42:13 37

原创 剑指 Offer 64. 求1+2+…+n

剑指 Offer 64. 求1+2+…+n题目求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解法用短路解法class Solution { public int sumNums(int n) { int res = n; boolean flag = n>0 && (res+=sumNums(n-1))>0; return

2020-10-05 18:36:28 69

原创 剑指 Offer 59 - I. 滑动窗口的最大值

剑指 Offer 59 - I. 滑动窗口的最大值题目给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。解法class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums.length == 0 || k == 0) return new int[0]; Deque<Integer> dq = new LinkedList<&g

2020-10-05 15:46:59 51

转载 剑指 Offer 56 - I. 数组中数字出现的次数

剑指 Offer 56 - I. 数组中数字出现的次数题目一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]解法将两个只出现一次的数字分到两个组里。之后每个组里进行异或就可以得出相应的两个数。(1)全部数字进行异或,之后得到一个数temp。(2)为了能将两个数字分开,找到temp最低位的1,说明这个位

2020-10-05 13:54:03 197

原创 剑指 Offer 55 - II. 平衡二叉树

剑指 Offer 55 - II. 平衡二叉树题目输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。解法class Solution { private boolean res = true; public boolean isBalanced(TreeNode root) { helper(root); return res; } private int h

2020-10-05 13:41:32 43

原创 剑指Offer52-两个链表的第一个公共节点

#剑指Offer52-两个链表的第一个公共节点题目解法设headA有5个节点,headB有3个节点则5+3x=3+5y可得,当x=5且y=3的时候,他们会相遇在第一个公共节点。 public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA == null || headB == null) { retur

2020-10-04 18:30:33 69

转载 剑指Offer49-丑数

剑指Offer49-丑数题目我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1 是丑数。n 不超过1690。解法动态规划的解法class Solution { public int nthUglyNumber(int n) { int[] dp = new int[n]

2020-10-04 16:31:31 53

转载 剑指Offer46-把数字翻译成字符串

剑指Offer46-把数字翻译成字符串题目给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”解法class Solution { public int trans

2020-10-04 14:07:27 217

转载 LeetCode面试题 17.24. 最大子矩阵

LeetCode面试题 17.24. 最大子矩阵题目给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。输入:[[-1,0],[0,-1]]输出:[0,1,0,1]解释:输入中标粗的元素即为输出所表示的矩阵1 <= matrix.length, mat

2020-10-03 23:59:17 391

转载 LeetCode53-最大子序和

LeetCode53-最大子序和题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解法class Solution { public int maxSubArray(int[] nums) { int len = nums.length; int max = nums[0]

2020-10-03 23:50:52 45

转载 剑指Offer45-把数组排成最小的数

剑指Offer45-把数组排成最小的数题目输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。输入: [10,2]输出: “102”解法此题求拼接起来的 “最小数字” ,本质上是一个排序问题。排序判断规则: 设 nums 任意两数字的字符串格式 x 和 y ,则若拼接字符串 x+y>y+x ,则 m>n ;反之,若 x+y<y+x ,则 n<m ;class Solution { public String m

2020-10-03 15:23:41 46

转载 剑指Offer43-1~n整数中1出现的次数

剑指Offer43-1~n整数中1出现的次数题目输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。输入:n = 12输出:5解法class Solution { public int countDigitOne(int n) { //high为cur左边的所有部分 int high = n / 10; //cur为当前位置的数字

2020-10-03 15:05:17 90

转载 剑指Offer41-数据流中的中位数

剑指Offer41-数据流中的中位数题目如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有

2020-10-02 21:16:54 55

转载 剑指Offer20-表示数值的字符串

剑指Offer20-表示数值的字符串题目请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。解法方法一:if-elsepublic boolean isNumber(String s) { if(s==null||s.length()==0) return false;

2020-10-02 20:21:32 50

原创 LeetCode146-LRU缓存机制

LeetCode146-LRU缓存机制题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的

2020-09-30 17:14:02 74

原创 LeetCode145-二叉树的后序遍历

LeetCode145-二叉树的后序遍历题目解法递归迭代class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> res = new LinkedList<>(); if(root==null) return res; Stack<TreeNode> st = new Stack

2020-09-30 00:52:23 41

转载 LeetCode94-二叉树的中序遍历

LeetCode94-二叉树的中序遍历题目解法方法一:递归方法二:迭代class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new LinkedList<>(); if(root == null) return res; Stack<TreeNode&gt

2020-09-29 21:52:58 44

转载 LeetCode144-二叉树的前序遍历

LeetCode144-二叉树的前序遍历题目解法方法一:递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { List<Integer> list =

2020-09-29 20:29:40 54

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除