
C++
文艺范ya
慢慢来吧,谁都有努力的过程
展开
-
LeetCode——1122. 数组的相对排序
题目描述:给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中,对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。提示:1 <= arr1.length, arr2.length <= 10000 <= arr1[i], arr2[i] <= 1000arr2 中的元素 arr2[i] 各不相同arr2 中原创 2021-03-01 19:54:19 · 171 阅读 · 0 评论 -
LeetCode——354. 俄罗斯套娃信封问题
题目描述:给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。示例:输入: envelopes = [[5,4],[6,4],[6,7],[2,3]]输出: 3解释: 最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6,7]原创 2020-12-25 11:29:30 · 314 阅读 · 0 评论 -
LeetCode——387. 字符串中的第一个唯一字符
题目描述:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。提示:你可以假定该字符串只包含小写字母。示例:s = “leetcode”返回 0s = “loveleetcode”返回 2代码如下:class Solution {public: int firstUniqChar(string s) { int size=s.size(); unordered_map<char,int>m;原创 2020-12-23 10:09:06 · 159 阅读 · 0 评论 -
LeetCode——5629. 重新格式化电话号码
题目描述:给你一个字符串形式的电话号码 number 。number 由数字、空格 ’ '、和破折号 ‘-’ 组成。请你按下述方式重新格式化电话号码。首先,删除 所有的空格和破折号。其次,将数组从左到右 每 3 个一组 分块,直到 剩下 4 个或更少数字。剩下的数字将按下述规定再分块:2 个数字:单个含 2 个数字的块。3 个数字:单个含 3 个数字的块。4 个数字:两个分别含 2 个数字的块。最后用破折号将这些块连接起来。注意,重新格式化过程中 不应该 生成仅含 1 个数字的块,并且 最多原创 2020-12-20 21:27:47 · 214 阅读 · 0 评论 -
LeetCode——216. 组合总和 III(回溯算法)
题目描述:找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]代码如下:class Solution {public: vector<vector<int>>res;原创 2020-12-18 12:14:23 · 209 阅读 · 0 评论 -
LeetCode——1646. 获取生成数组中的最大值
题目描述:给你一个整数 n 。按下述规则生成一个长度为 n + 1 的数组 nums :nums[0] = 0nums[1] = 1当 2 <= 2 * i <= n 时,nums[2 * i] = nums[i]当 2 <= 2 * i + 1 <= n 时,nums[2 * i + 1] = nums[i] + nums[i + 1]返回生成数组 nums 中的 最大 值。示例 1:输入:n = 7输出:3解释:根据规则:nums[0] = 0nums[1原创 2020-12-17 21:26:03 · 207 阅读 · 0 评论 -
LeetCode——1046. 最后一块石头的重量
题目描述:有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。提示:1 <= stones.length <= 301 <= stone原创 2020-12-13 23:27:30 · 311 阅读 · 0 评论 -
LeetCode——1394. 找出数组中的幸运数
题目描述:在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。给你一个整数数组 arr,请你从中找出并返回一个幸运数。如果数组中存在多个幸运数,只需返回 最大 的那个。如果数组中不含幸运数,则返回 -1 。提示:1 <= arr.length <= 5001 <= arr[i] <= 500示例 1:输入:arr = [2,2,3,4]输出:2解释:数组中唯一的幸运数是 2 ,因为数值 2 的出现频次也是 2 。示例 2:输入:a原创 2020-12-13 20:23:36 · 260 阅读 · 0 评论 -
LeetCode——125. 验证回文串
题目描述:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false代码如下:class Solution {public: bool isPalindrome(string s) { int size=s.size();原创 2020-12-11 17:01:10 · 135 阅读 · 0 评论 -
LeetCode——1556. 千位分隔数
题目描述:给你一个整数 n,请你每隔三位添加点(即 “.” 符号)作为千位分隔符,并将结果以字符串格式返回。提示:0 <= n < 2^31示例 1:输入:n = 987输出:“987”示例 2:输入:n = 1234输出:“1.234”示例 3:输入:n = 123456789输出:“123.456.789”示例 4:输入:n = 0输出:“0”题目描述:class Solution {public: string thousandSeparator原创 2020-12-11 16:10:43 · 212 阅读 · 0 评论 -
LeetCode——347. 前 K 个高频元素
题目描述:给定一个非空的整数数组,返回其中出现频率前 k 高的元素。提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]代码原创 2020-12-11 15:50:30 · 118 阅读 · 0 评论 -
转置矩阵
题目描述:给定一个矩阵 A, 返回 A 的转置矩阵。矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。提示:1 <= A.length <= 10001 <= A[0].length <= 1000示例 1:输入:[[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:输入:[[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]]代码如下:class Solution原创 2020-12-11 14:50:25 · 158 阅读 · 0 评论 -
LeetCode——495. 提莫攻击
题目描述:在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。现在,给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间,你需要输出艾希的中毒状态总时长。你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。提示:你可以假定时间序列数组的总长度不超过 10000。你可以假定提莫攻击时间序列中的数字和提莫攻击的中毒持续时间都是非负整数,并且不超过 10,000,000。示例1:输入: [1,4], 2输出: 4原因: 第 1原创 2020-12-11 14:19:36 · 345 阅读 · 0 评论 -
LeetCode——917. 仅仅反转字母
题目描述:给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。提示:S.length <= 10033 <= S[i].ASCIIcode <= 122S 中不包含 \ or "示例 1:输入:“ab-cd”输出:“dc-ba”示例 2:输入:“a-bC-dEf-ghIj”输出:“j-Ih-gfE-dCba”示例 3:输入:“Test1ng-Leet=code-Q!”输出:“Qedo1ct-eeLg=ntse原创 2020-12-11 10:47:04 · 89 阅读 · 0 评论 -
LeetCode——506. 相对名次
题目描述:给出 N 名运动员的成绩,找出他们的相对名次并授予前三名对应的奖牌。前三名运动员将会被分别授予 “金牌”,“银牌” 和“ 铜牌”(“Gold Medal”, “Silver Medal”, “Bronze Medal”)。(注:分数越高的选手,排名越靠前。)提示:N 是一个正整数并且不会超过 10000。所有运动员的成绩都不相同。示例 1:输入: [5, 4, 3, 2, 1]输出: [“Gold Medal”, “Silver Medal”, “Bronze Medal”, “4原创 2020-12-11 10:26:08 · 141 阅读 · 0 评论 -
异或总结,位运算
异或性质:相同为0,不同为11.由于0^0=0 0^1=1 所以,0^任何数 = 任何数。2.由于1^0=1 1^1 =0所以,1^任何数 = 任何数取反。3.任何数^任何数 = 0。4.用于将特定的位反转,如对10100001的第2位和第3位翻转,可以将数与00000110进行按位异或运算。5.通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。6.异或运算的特点:a两次异或同一个数b(a=abb)仍然为原值a。7.异或是可交换的:a^b = b^a。例1:不使用临时变量交换a和b原创 2020-12-10 11:35:53 · 1545 阅读 · 0 评论 -
LeetCode——747. 至少是其他数字两倍的最大数
题目描述:在一个给定的数组nums中,总是存在一个最大元素 。查找数组中的最大元素是否至少是数组中每个其他数字的两倍。如果是,则返回最大元素的索引,否则返回-1。提示:nums 的长度范围在[1, 50].每个 nums[i] 的整数范围在 [0, 100].示例 1:输入: nums = [3, 6, 1, 0]输出: 1解释: 6是最大的整数, 对于数组中的其他整数,6大于数组中其他元素的两倍。6的索引是1, 所以我们返回1.示例 2:输入: nums = [1, 2, 3,原创 2020-12-09 21:56:34 · 153 阅读 · 0 评论 -
LeetCode——653. 两数之和 IV - 输入 BST
题目描述:给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。案例 1:案例 2:代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right原创 2020-12-07 22:07:47 · 231 阅读 · 0 评论 -
LeetCode——剑指 Offer 03. 数组中重复的数字(哈希表)
题目描述:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。限制:2 <= n <= 100000示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3代码如下:class Solution {public: int findRepeatNumber(vector<int>&am原创 2020-12-07 16:44:54 · 159 阅读 · 0 评论 -
求第三大的数
题目描述:给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。示例 1:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.示例 2:输入: [1, 2]输出: 2解释: 第三大的数不存在, 所以返回最大的数 2 .示例 3:输入: [2, 2, 3, 1]输出: 1解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。存在两个值为2的数,它们都排第二。解释:使用set去掉数组中的重复元素。代码如下:class Solution {原创 2020-12-06 19:17:43 · 230 阅读 · 0 评论 -
LeetCode——485. 最大连续1的个数
题目描述:给定一个二进制数组, 计算其中最大连续1的个数。注意:输入的数组只包含 0 和1。输入数组的长度是正整数,且不超过 10,000。示例 1:输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.代码如下:class Solution {public: int findMaxConsecutiveOnes(vector<int>& nums) { int size=nums.原创 2020-12-06 18:28:09 · 122 阅读 · 0 评论 -
LeetCode——1470. 重新排列数组
题目描述:给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,…,xn,y1,y2,…,yn] 的格式排列。请你将数组按 [x1,y1,x2,y2,…,xn,yn] 格式重新排列,返回重排后的数组。提示:1 <= n <= 500nums.length == 2n1 <= nums[i] <= 10^3示例 1:输入:nums = [2,5,1,3,4,7], n = 3输出:[2,3,5,4,1,7]解释:由于 x1=2, x2=5, x3=1,原创 2020-12-06 17:13:20 · 195 阅读 · 0 评论 -
LeetCode——5618. K 和数对的最大数目(二分)
题目描述:给你一个整数数组 nums 和一个整数 k 。每一步操作中,你需要从数组中选出和为 k 的两个整数,并将它们移出数组。返回你可以对数组执行的最大操作数。提示:1 <= nums.length <= 1051 <= nums[i] <= 1091 <= k <= 109示例 1:输入:nums = [1,2,3,4], k = 5输出:2解释:开始时 nums = [1,2,3,4]:移出 1 和 4 ,之后 nums = [2,3]移出 2原创 2020-12-06 17:03:20 · 308 阅读 · 0 评论 -
LeetCode——905. 按奇偶排序数组
题目描述:给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。提示:1 <= A.length <= 50000 <= A[i] <= 5000示例:输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。代码如下:class Solution {public: vector<int> s原创 2020-12-05 11:56:07 · 433 阅读 · 6 评论 -
LeetCode——219. 存在重复元素 II(哈希表)
题目描述:给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。示例 1:输入: nums = [1,2,3,1], k = 3输出: true示例 2:输入: nums = [1,0,1,1], k = 1输出: true示例 3:输入: nums = [1,2,3,1,2,3], k = 2输出: false代码如下:class Solution {public:原创 2020-12-04 16:43:06 · 168 阅读 · 0 评论 -
LeetCode——169. 多数元素(哈希表)
题目描述:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2代码如下:class Solution {public: int majorityElement(vector<int>& nums) { int size=nums.size原创 2020-12-03 22:04:16 · 189 阅读 · 0 评论 -
LeetCode——1304. 和为零的N个唯一整数
题目描述 :给你一个整数 n,请你返回 任意 一个由 n 个 各不相同 的整数组成的数组,并且这 n 个数相加和为 0 。提示:1 <= n <= 1000示例 1:输入:n = 5输出:[-7,-1,1,3,4]解释:这些数组也是正确的 [-5,-1,1,2,3],[-3,-1,2,-2,4]。示例 2:输入:n = 3输出:[-1,0,1]解释:利用关于0对称和为0的性质,当n为奇数时即求[-n/2,n/2]的和(包含0),当n为偶数时即求[-n/2,n/2](不含0)原创 2020-12-03 21:17:25 · 180 阅读 · 0 评论 -
LeetCode——1619. 删除某些元素后的数组均值
题目描述:给你一个整数数组 arr ,请你删除最小 5% 的数字和最大 5% 的数字后,剩余数字的平均值。与 标准答案 误差在 10-5 的结果都被视为正确结果。提示:20 <= arr.length <= 1000arr.length 是 20 的 倍数0 <= arr[i] <= 105示例 1:输入:arr = [1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3]输出:2.00000解释:删除数组中最大和最小的元素后,所有元素都等原创 2020-12-03 20:13:00 · 211 阅读 · 0 评论 -
LeetCode——1413. 逐步求和得到正数的最小值
题目描述:给你一个整数数组 nums 。你可以选定任意的 正数 startValue 作为初始值。你需要从左到右遍历 nums 数组,并将 startValue 依次累加上 nums 数组中的值。请你在确保累加和始终大于等于 1 的前提下,选出一个最小的 正数 作为 startValue 。提示:1 <= nums.length <= 100-100 <= nums[i] <= 100示例 1:输入:nums = [-3,2,-3,4,2]输出:5解释:如果你选择原创 2020-12-03 19:56:29 · 143 阅读 · 0 评论 -
LeetCode——1652. 拆炸弹
题目描述:你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。为了获得正确的密码,你需要替换掉每一个数字。所有数字会 同时 被替换。如果 k > 0 ,将第 i 个数字用 接下来 k 个数字之和替换。如果 k < 0 ,将第 i 个数字用 之前 k 个数字之和替换。如果 k == 0 ,将第 i 个数字用 0 替换。由于 code 是循环的, code[n-1] 下一个元素是 code[0] ,且 code[0] 前一个元素是原创 2020-12-03 16:12:48 · 478 阅读 · 0 评论 -
LeetCode——1385. 两个数组间的距离值
题目描述:给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]| <= d 。提示:1 <= arr1.length, arr2.length <= 500-10^3 <= arr1[i], arr2[j] <= 10^30 <= d <= 100示例 1:输入:arr原创 2020-12-03 15:29:42 · 171 阅读 · 0 评论 -
LeetCode——1588. 所有奇数长度子数组的和
题目描述:给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。子数组 定义为原数组中的一个连续子序列。请你返回 arr 中 所有奇数长度子数组的和 。提示:1 <= arr.length <= 1001 <= arr[i] <= 1000示例 1:输入:arr = [1,4,2,5,3]输出:58解释:所有奇数长度子数组和它们的和为:[1] = 1[4] = 4[2] = 2[5] = 5[3] = 3[1,4,2] = 7[4,2,原创 2020-12-03 15:10:44 · 374 阅读 · 0 评论 -
LeetCode——1431. 拥有最多糖果的孩子
题目描述:给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。示例 1:输入:candies = [2,3,5,1,3], extraCandies = 3输出:[true,true,true,false,true]解释:孩子 1 有 2 个糖果,如果原创 2020-12-02 23:52:13 · 172 阅读 · 0 评论 -
LeetCode——1480. 一维数组的动态和
题目描述:给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。提示:1 <= nums.length <= 1000-10^6 <= nums[i] <= 10^6示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。示例 2:输入:nums = [1,1,1,1,原创 2020-12-02 23:36:47 · 127 阅读 · 0 评论 -
LeetCode——1528. 重新排列字符串
题目描述:给你一个字符串 s 和一个 长度相同 的整数数组 indices 。请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。返回重新排列后的字符串。示例 1:输入:s = “codeleet”, indices = [4,5,6,7,0,2,1,3]输出:“leetcode”解释:如图所示,“codeleet” 重新排列后变为 “leetcode” 。示例 2:输入:s = “abc”, indices = [0,1,2]输出:“abc”解释:原创 2020-12-02 19:30:32 · 178 阅读 · 1 评论 -
LeetCode——349. 两个数组的交集
题目描述:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]代码如下:class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums原创 2020-12-02 18:44:43 · 119 阅读 · 0 评论 -
LeetCode——217. 存在重复元素
题目描述:给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true代码如下:class Solution {public: bool containsDuplicate(vector<int>&原创 2020-12-02 09:21:27 · 135 阅读 · 0 评论 -
LeetCode——9. 回文数
题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。要求:不将整数转为字符串来解决这个问题。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。代码如下:class Solution {public: bo原创 2020-12-02 08:38:47 · 297 阅读 · 1 评论 -
LeetCode——1502. 判断能否形成等差数列
题目描述:给你一个数字数组 arr 。如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。提示:2 <= arr.length <= 1000-10^6 <= arr[i] <= 10^6示例 1:输入:arr = [3,5,1]输出:true解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别为 2 或 -2 ,可以形成原创 2020-12-01 23:24:54 · 460 阅读 · 0 评论 -
LeetCode——922. 按奇偶排序数组 II
题目描述:给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。你可以返回任何满足上述条件的数组作为答案。提示:2 <= A.length <= 20000A.length % 2 == 00 <= A[i] <= 1000示例:输入:[4,2,5,7]输出:[4,5,2,7]解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。代原创 2020-12-01 21:23:25 · 125 阅读 · 0 评论