力扣
Persistence_Y_1
这个作者很懒,什么都没留下…
展开
-
谈一谈你所理解的TopK问题
在实际的应用和工作当中, 我们经常会遇到在海量的数据当中寻找出前K个最大值或最小值的问题, 为了实现这个功能, 我们最先想到的方法可能就是排序, 在排序之后的序列当中取出前K个即可, 这样的方法确实可以, 但是存在一定的问题, 千万不要忘了这个问题的前提海量数据, 这就也就是说当数据规模过大内存放不下的时候, 我们再去使用常见的排序就无法解决.因此, 对于这种海量数据的TopK问题, 一种经常使用的方法就是借助堆去解决 使用堆原创 2020-09-02 19:43:52 · 290 阅读 · 0 评论 -
详细阐述及推导将长度为n的绳子剪成m段,得到m段长度乘积最大值的剪绳子问题
问题描述:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例1输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例2输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 =原创 2020-06-21 22:42:48 · 1395 阅读 · 2 评论 -
数组中的第k个最大元素
问题描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。来源:力扣链接:数组中第k个最大元素思路:利用 priority_queue优先级队列, 建立k个数据小堆,将nums中剩余数原创 2020-06-07 22:16:41 · 227 阅读 · 0 评论 -
矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一原创 2020-05-22 23:06:57 · 212 阅读 · 0 评论 -
字符串区间部分翻转
题目描述给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。示例:输入: s = “abcdefg”, k = 2输出: “bacdfeg”要求:该字符串只包含小写的英文字母。给定字符串的长度和 k 在[1, 10000]范围内。来源:力扣(LeetCode)链接:字符串区间部分翻转代码示例:class原创 2020-05-13 21:09:46 · 913 阅读 · 0 评论 -
字符串相加, 大数加法
题目描述给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。注意:num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。来源:力扣链接:字符串相加思路:首先根据字符串 num1 和 num2的长...原创 2020-06-03 20:37:49 · 715 阅读 · 0 评论 -
翻转字符串中的单词
题目描述给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例 1:输入: “Let’s take LeetCode contest”输出: “s’teL ekat edoCteeL tsetnoc”注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。来源:力扣链接:翻转字符串中的单词思路:根据空格将字符串中的每个单词分...原创 2020-05-06 19:39:44 · 440 阅读 · 0 评论 -
翻转二叉树
题目描述翻转一棵二叉树。示例 :输入:输出:来源:力扣链接:翻转二叉树思路:首先, 若根为NULL则直接返回NULL根不为NULL, 先翻转根节点的左右子树, 即交换根节点左右子树递归左子树, 递归右子树, 实现每一个节点左右子树的交换, 最终完成二叉树翻转代码示例:struct TreeNode* invertTree(struct TreeNode* root){...原创 2020-03-16 16:40:10 · 140 阅读 · 0 评论 -
对称二叉树
题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:来源:力扣链接:对称二叉树代码示例:bool _cmpTree(struct TreeNode *p, struct TreeNode *q)//判断两个二叉树是否呈镜像对称的函数{ if (...原创 2020-03-23 21:02:04 · 92 阅读 · 0 评论 -
相同的树
题目描述给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例输入:输出: true示例2 :输入:输出: false示例3 :输入:输出: false来源:力扣链接:相同的树思路:首先对传入的p, q节点进行判断全为 NULL, 返回true(认定空树为相同树)其中一个节点为空, 另一个不为...原创 2020-03-13 16:45:43 · 117 阅读 · 0 评论 -
二叉树的最大深度
题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3, 9, 20, null, null, 15, 7]返回它的最大深度 3来源:力扣链接:二叉树最大深度思路:首先要明确, 一颗二叉树的深度可以分解为:1 + max(左子树深度, 右子树深度)由此我们可以利用递归求解...原创 2020-03-12 18:15:21 · 112 阅读 · 0 评论 -
单值二叉树
题目描述如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例1:输入:[1,1,1,1,1,null,1]输出:true示例 2:输入:[2,2,2,5,2]输出:false来源:力扣链接:单值二叉树代码示例:bool isUnivalTree(struct TreeNode* root)...原创 2020-03-09 19:35:52 · 168 阅读 · 0 评论 -
力扣(C++):字符串转换整数
题目描述请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字...原创 2020-03-04 17:37:15 · 511 阅读 · 0 评论 -
力扣(C++):二进制求和
题目描述给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1”输出: “100”示例 2:输入: a = “1010”, b = “1011”输出: “10101”来源:力扣(LeetCode)链接:二进制求和代码示例:class Solution {public: str...原创 2020-02-28 18:29:10 · 1101 阅读 · 0 评论 -
力扣(C++):两数之和
题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(...原创 2020-02-23 18:38:27 · 1571 阅读 · 0 评论 -
力扣(C++):仅仅反转字母
题目描述给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。**示例 1:输入:“ab-cd”输出:“dc-ba”示例 2:输入:“a-bC-dEf-ghIj”输出:“j-Ih-gfE-dCba”示例 3:输入:“Test1ng-Leet=code-Q!”输出:“Qedo1ct-eeLg=ntse-T!”...原创 2020-02-04 19:22:05 · 221 阅读 · 0 评论 -
力扣(C++):第三大的数
题目描述给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。示例 1:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.示例 2:输入: [1, 2]输出: 2解释: 第三大的数不存在, 所以返回最大的数 2 .示例 3:输入: [2, 2, 3, 1]输出: 1解释: 注意,要求返回第三大的数,是指第...原创 2020-02-18 20:33:08 · 922 阅读 · 0 评论 -
力扣(C++): 加一
题目描述给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。来源...原创 2020-02-14 23:27:39 · 520 阅读 · 0 评论 -
力扣(C++): 寻找数组的中心索引
题目描述给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出: 3解释:索引3 (nums...原创 2020-02-11 19:29:15 · 669 阅读 · 0 评论 -
力扣(C++):按奇偶排列数组
问题描述给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例:输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。题目来源力扣网.代码示例:class Solution {public: vector<...原创 2020-02-06 19:24:21 · 528 阅读 · 0 评论 -
力扣(C++):仅仅反转字母
题目描述给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。示例 1:输入:“ab-cd”输出:“dc-ba”示例 2:输入:“a-bC-dEf-ghIj”输出:“j-Ih-gfE-dCba”示例 3:输入:“Test1ng-Leet=code-Q!”输出:“Qedo1ct-eeLg=ntse-T!”题目来源力扣.代码示...原创 2020-02-05 17:22:48 · 184 阅读 · 0 评论 -
力扣(C++): 有序数组的平方
题目描述给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例 1:输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]示例 2:输入:[-7,-3,2,3,11]输出:[4,9,9,49,121]题目来源力扣网.代码示例:class Solution {public: vector<int> ...原创 2020-02-03 12:54:40 · 538 阅读 · 0 评论 -
力扣(C++): 长按键入
题目描述你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。示例1输入:name = “alex”, typed = “aaleex”输出:true解释:‘alex’ 中的 ‘a’ 和 ‘e’ 被长按...原创 2020-02-02 17:34:19 · 638 阅读 · 0 评论 -
力扣(C++): 存在重复元素
题目描述给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 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 ...原创 2020-01-31 14:06:32 · 714 阅读 · 0 评论 -
力扣(C++): 合并两个有序数组
题目描述给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 ...原创 2020-01-30 19:30:51 · 841 阅读 · 0 评论 -
力扣(C++): 最后一个单词长度
题目描述给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。说明:一个单词是指仅由字母组成、不包含任何空格的 最大子字符串。示例输入: “Hello World”输出: 5考虑两种情况: 一种 “Hello World”另一种 "Hello World...原创 2020-01-29 19:27:51 · 303 阅读 · 0 评论 -
力扣(C++): 回文数
题目描述判断一个整数是否是回文数。回文数是指正序从左向右和倒序从右向左读都是一样的整数.示例1输入: 121输出: true示例2输入: -121输出: false解释: 从左向右读,为 -121 .从右向左读, 为 121- .因此它不是一个回文数.示例3输入: 10输出: false解释: 从右向左读,为 01 .因此它不是一个回文数.题目来源力扣网.代码示例"c...原创 2020-01-22 11:12:32 · 532 阅读 · 0 评论 -
力扣(C++): 赎金信
问题描述给定一个赎金信(ransom)字符串和一个杂志(magazine)字符串判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成.如果可以构成,返回 true;否则返回 false题目说明为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思.示例canConstruct(“a”, “b”) -> falsecanCon...原创 2020-01-19 11:29:27 · 234 阅读 · 0 评论 -
力扣(C++): 搜索插入位置
题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例1输入: [1,3,5,6], 5输出: 2示例2输入: [1,3,5,6], 2输出: 1示例3输入: [1,3,5,6], 7输出: 4示例4输入: [1,3,5,6], 0输出: 0代码示例:class...原创 2020-01-17 17:12:33 · 352 阅读 · 0 评论 -
力扣(C++):移除数组中的元素
题目描述给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例1给定 nums = [3,2,2,3], val = 3函数应该返回新的长度 2, 并且 nums 中的前两个元素...原创 2020-01-11 15:56:30 · 6263 阅读 · 1 评论 -
力扣(C++): 旋转数组
问题描述给定一个数组, 将数组中的元素向右移动k个位置, 其中k是非负数示例1输入: [1, 2, 3, 4, 5, 6, 7] 和 k = 3输出: [5, 6, 7, 1, 2, 3, 4]解释:向右旋转1步: [7, 1, 2, 3, 4, 5, 6]向右旋转2步: [6, 7, 1, 2, 3, 4, 5]向右旋转3步: [5, 6, 7, 1, 2, 3, 4]代码示例...原创 2020-01-10 16:06:06 · 235 阅读 · 0 评论 -
力扣(C++): 大写字母转为小写
问题描述实现一个函数, 该函数接收一个字符串参数str, 并将该字符串中的大写字母转换成小写字母, 之后返回新的字符串示例1输入 “HELLO”输出 “hello”示例2输入 “here”输出 “here”示例3输入 “LOVELY”输出 “lovely”代码示例:class Solution {public: string toLowerCase(string ...原创 2020-01-08 19:21:39 · 2159 阅读 · 0 评论 -
背包问题
问题描述有n个物品和一个大小为m的背包. 给定一个数组A表示每个物品的大小, 一个数组V表示每个物品的价值.那么最多能装入背包的总价值为多大?用F(i, j)表示前 i 个物品放入大小为 j 的背包中所获得的最大价值这样的话, 其实每当我们看到第i个商品的时候, 我们都有两种选择, 就是放进背包或者是不放进背包.首先, 如果第 i 个物品的大小大于背包的容量, 那么这个物品不能放进背包,...原创 2019-12-22 22:50:56 · 108 阅读 · 0 评论 -
重复N次的元素
问题描述在大小为2N的数组A中有N+1个不同的元素, 其中有一个元素重复了N次返回重复了N次的哪个元素class Solution {public: int repeatedNTimes(vector<int>& A) { unordered_map<int, int> um; int n = A.size() / 2; for (auto ...原创 2019-12-19 22:46:08 · 164 阅读 · 0 评论