自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 376摆动序列(动态规划)

1、题目描述如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如,[1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3)是正负交替出现的。相反, [1,4,7,2,5]和[1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(...

2021-02-27 20:28:15 114

原创 454四数相加 II(哈希表,空间换时间)

1、题目描述给定四个包含整数的数组列表A , B , C , D ,计算有多少个元组 (i, j, k, l),使得A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过231 - 1 。2、示例输入:A = [ 1, 2]B = [-2,-1]C = [-1, 2]D = [ 0, 2]输出:2...

2021-02-27 14:51:38 110

原创 412Fizz Buzz(数字和字符串相互转化)

1、题目描述写一个程序,输出从 1 到 n 数字的字符串表示。1. 如果n是3的倍数,输出“Fizz”;2. 如果n是5的倍数,输出“Buzz”;3.如果n同时是3和5的倍数,输出 “FizzBuzz”。2、示例:n = 15,返回:["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]3、题解基本思想:数字与字符串的相互转换,分别是st...

2021-02-27 12:54:50 322

原创 395至少有K个重复字符的最长子串(分治法)

1、题目描述找到给定字符串(由小写字符组成)中的最长子串 T ,要求T中的每一字符出现次数都不少于 k 。输出 T的长度。2、示例输入:s = "ababbc", k = 2输出:5最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。3、题解基本思想:分治法,对于一个字符串来说,如果要求子串最少出现k次,那么如果某些字母出现的次数小于k,这些字母一定不会出现在最长的子串中,并且这些字母将整个字符子串分割成小段,这些小段有可能是最长的,...

2021-02-27 11:02:14 275

原创 384打乱数组(洗牌算法)

1、题目描述给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。实现 Solution class:Solution(int[] nums) 使用整数数组 nums 初始化对象int[] reset() 重设数组到它的初始状态并返回int[] shuffle() 返回数组随机打乱后的结果提示:1 <= nums.length <= 200 -10^6 <= nums[i] <= 10^6 nums 中的所有元素都是 唯一的 最多可以调用

2021-02-26 21:04:10 183

原创 380常数时间插入、删除和获取随机元素(哈希表)

1、题目描述设计一个支持在平均时间复杂度 O(1)下,执行以下操作的数据结构。insert(val):当元素 val 不存在时,向集合中插入该项。remove(val):元素 val 存在时,从集合中移除该项。getRandom:随机返回现有集合中的一项。每个元素应该有相同的概率被返回。2、示例// 初始化一个空的集合。RandomizedSet randomSet = new RandomizedSet();// 向集合中插入 1 。返回 true 表示 1 被成功地插入。..

2021-02-26 17:25:12 231

原创 378有序矩阵中第 K 小的元素(归并+小顶堆)

1、题目描述给你一个n x n矩阵matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。提示:n == matrix.length n == matrix[i].length 1 <= n <= 300 -10^9 <= matrix[i][j] <= 10^9 题目数据 保证 matrix 中的所有行和列都按 非递减顺序 排列 1 <= k <= ...

2021-02-26 16:54:32 141

原创 763划分字母区间(排序+双指针)

1、题目描述字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。提示:S的长度在[1, 500]之间。 S只包含小写字母 'a' 到 'z' 。2、示例输入:S = "ababcbacadefegdehijhklij"输出:[9,7,8]解释:划分结果为 "ababcbaca", "defegde", "hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefegde"

2021-02-25 15:28:54 116

原创 375猜数字大小 II(动态规划,区间动态规划,矩阵链乘法——总结)

1、题目描述我们正在玩一个猜数游戏,游戏规则如下:我从1到 n 之间选择一个数字,你来猜我选了哪个数字。每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。2、示例n = 10, 我选择了8.第一轮: 你猜我选择的数字是5,我会告诉你,我的数字更大一些,然后你需要支付5块。第二轮: 你猜是7,我告诉你,我的数字更大一些,你支付7块。第三轮: 你猜是9,..

2021-02-17 21:35:25 562

原创 368最大整除子集(动态规划)

1、题目描述给出一个由无重复的正整数组成的集合,找出其中最大的整除子集,子集中任意一对 (Si,Sj) 都要满足:Si % Sj = 0 或 Sj % Si = 0。如果有多个目标子集,返回其中任何一个均可。2、示例输入: [1,2,4,8]输出: [1,2,4,8]3、题解解法一:基本思想:递归,超时,这种题目一旦递归超时得用动态规划解法二:基本思想:动态规划dp[i]: 以nums[i]结尾的序列最大长度,初始状态都为1,至少长度为1 pre[i]: 在最大序

2021-02-17 15:50:31 189

原创 373查找和最小的K对数字(大顶堆、归并+小顶堆、大小堆)

1、题目描述给定两个以升序排列的整形数组 nums1 和 nums2, 以及一个整数 k。定义一对值(u,v),其中第一个元素来自nums1,第二个元素来自 nums2。找到和最小的 k 对数字(u1,v1), (u2,v2) ... (uk,vk)。2、示例输入: nums1 = [1,1,2], nums2 = [1,2,3], k = 2输出: [1,1],[1,1]解释: 返回序列中的前 2 对数: [1,1],[1,1],[1,2],[2,1],[1,2],...

2021-02-17 00:56:19 274

原创 372超级次方(快速幂)

1、题目描述你的任务是计算ab对1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。提示:1 <= a <= 231 - 1 1 <= b.length <= 2000 0 <= b[i] <= 9 b 不含前导 02、示例输入:a = 2147483647, b = [2,0,0]输出:11983、题解基本思想:快速幂算法+取模运算性质:a^b%p=((a%p)^b)%p快速幂算法,将n看成二进制数,...

2021-02-15 00:29:37 557

原创 1143最长公共子序列(动态规划——困难)

1、题目描述给定两个字符串text1 和text2,返回这两个字符串的最长公共子序列的长度。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。提示:1 <= text1.length &l...

2021-02-14 00:11:39 151

原创 365水壶问题(数学)

1、题目描述有两个容量分别为x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的z升水。你允许:装满任意一个水壶清空任意一个水壶从一个水壶向另外一个水壶倒水,直到装满或者倒空2、示例输入: x = 3, y = 5, z = 4输出: True3、题解解法一:基本思想:递归dfs深度优先搜索,超时,将x与y相减得到的数cur保存至res,然后cur与res中所有数相...

2021-02-12 18:49:46 378

原创 354俄罗斯套娃信封问题(最长递增子序列问题:动态规划+二分查找——困难)

1、题目描述给定一些标记了宽度和高度的信封,宽度和高度以整数对形式(w, h)出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。2、示例输入: envelopes = [[5,4],[6,4],[6,7],[2,3]]输出: 3解释: 最多信封的个数为 3, 组合为: [2,3] => [5,4] =&gt...

2021-02-07 15:57:10 144

原创 357计算各个位数不同的数字个数(排列组合)

1、题目描述给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n。2、示例输入: 2输出: 91解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。3、题解基本思想:排列组合,组成n位数各个位上数字都不同的组合方式,当n=4,cur=9*9*8*7,以此类推#include<iostream>#include<vector>#include..

2021-02-06 15:27:05 1031

原创 352将数据流变为多个不相交区间(set集合)

1、题目描述给定一个非负整数的数据流输入 a1,a2,…,an,…,将到目前为止看到的数字总结为不相交的区间列表。进阶:如果有很多合并,并且与数据流的大小相比,不相交区间的数量很小,该怎么办?2、示例假设数据流中的整数为 1,3,7,2,6,…,每次的总结为:[1, 1][1, 1], [3, 3][1, 1], [3, 3], [7, 7][1, 3], [7, 7][1, 3], [6, 7]3、题解基本思想:把每个插入值放在一个set里,返回的列表就每次遍历set

2021-02-05 17:31:39 147

原创 327区间和的个数(前缀和+归并排序——困难)

1、题目描述给定一个整数数组nums 。区间和S(i, j)表示在nums中,位置从i到j的元素之和,包含i和j(i ≤ j)。请你以下标 i (0 <= i <= nums.length )为起点,元素个数逐次递增,计算子数组内的元素和。当元素和落在范围 [lower, upper] (包含lower和upper)之内时,记录子数组当前最末元素下标 j ,记作 有效 区间和S(i, j) 。求数组中,值位于范围 [lower, upper] (...

2021-02-05 15:03:23 264

原创 315计算右侧小于当前元素的个数(归并排序、二叉搜索树、插入排序——困难)

1、题目描述给定一个整数数组 nums,按要求返回一个新数组counts。数组 counts 有该性质: counts[i] 的值是nums[i] 右侧小于nums[i] 的元素的数量。提示:0 <= nums.length <= 10^5 -10^4<= nums[i] <= 10^42、示例输入:nums = [5,2,6,1]输出:[2,1,1,0]解释:5 的右侧有 2 个更小的元素 (2 和 1)2 的右侧仅有 1 个更小的元素 (1...

2021-02-04 13:58:44 132

原创 282给表达式添加运算符(递归回溯——困难)

1、题目描述给定一个仅包含数字0-9的字符串和一个目标值,在数字之间添加二元运算符(不是一元)+、-或*,返回所有能够得到目标值的表达式。2、示例输入: num = "123", target = 6输出: ["1+2+3", "1*2*3"]3、题解基本思想:递归回溯,暴力遍历所有的可能性,时间复杂度O(4^N)class Solution {public: vector<string> res; vector<string&gt...

2021-02-02 20:49:42 156

原创 284顶端迭代器(类的设计)

1、题目描述给定一个迭代器类的接口,接口包含两个方法:next()和hasNext()。设计并实现一个支持peek()操作的顶端迭代器 -- 其本质就是把原本应由next()方法返回的元素peek()出来。进阶:你将如何拓展你的设计?使之变得通用化,从而适应所有的类型,而不只是整数型?2、示例假设迭代器被初始化为列表[1,2,3]。调用next() 返回 1,得到列表中的第一个元素。现在调用peek()返回 2,下一个元素。在此之后调用next() 仍然返回...

2021-02-02 17:59:13 106

原创 260只出现一次的数字 III(位运算)

1、题目描述给定一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。注意:结果输出的顺序并不重要,对于上面的例子,[5, 3]也是正确答案。 你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?2、示例输入: [1,2,1,3,2,5]输出: [3,5]3、题解基本思想:位运算,将nums中所有元素异或得到的就是所求元素a和b不进位的相加结果x,那么x的第一个非0位n就是a和b在第n位上互为0和1,所以可...

2021-02-02 16:40:20 99

原创 330按要求补齐数组(贪心算法+数学——困难)

1、题目描述给定一个已排序的正整数数组 nums,和一个正整数n 。从[1, n]区间内选取任意个数字补充到nums中,使得[1, n]区间内的任何数字都可以用nums中某几个数字的和来表示。请输出满足上述要求的最少需要补充的数字个数。2、示例输入: nums = [1,3], n = 6输出: 1解释:根据 nums里现有的组合[1], [3], [1,3],可以得出1, 3, 4。现在如果我们将2添加到nums 中,组合变为: [1], [2], [...

2021-02-02 15:39:32 246

原创 335路径交叉(数学)

1、题目描述给定一个含有n个正数的数组x。从点(0,0)开始,先向北移动x[0]米,然后向西移动x[1]米,向南移动x[2]米,向东移动x[3]米,持续移动。也就是说,每次移动后你的方位会发生逆时针变化。编写一个O(1)空间复杂度的一趟扫描算法,判断你所经过的路径是否相交。2、示例┌───┐│ │└───┼──>│输入: [2,1,1,2]输出: true3、题解基本思想:数学,交叉只有三种可能第一种:x[i] &gt...

2021-02-01 15:59:14 206

原创 336回文对(前缀树——困难)

1、题目描述给定一组 互不相同 的单词, 找出所有不同的索引对(i, j),使得列表中的两个单词,words[i] + words[j],可拼接成回文串。2、示例输入:["abcd","dcba","lls","s","sssll"]输出:[[0,1],[1,0],[3,2],[2,4]]解释:可拼接成的回文串为 ["dcbaabcd","abcddcba","slls","llssssll"]3、题解基本思想:前缀树,x+y组成回文串,要么x和y中有一部分是回文例如lls+...

2021-02-01 15:13:51 207

空空如也

空空如也

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

TA关注的人

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