Processing math: 50%

03 2021 档案

【C++】大根堆与小根堆
摘要:STL实现 C++中,大根堆和小根堆可以使用优先队列实现。 #include <queue> priority_queue<int> pq1 // 大根堆 priority_queue<int, vector<int>, greater<int>> pq2 // 小根堆 该STL支持自定义比较函数,
5790
0
3
【LeetCode-875】爱吃香蕉的珂珂
摘要:问题 珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。 珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多
76
0
0
【LeetCode-410】分割数组的最大值
摘要:问题 给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组。 设计一个算法使得这 m 个子数组各自和的最大值最小。 示例 输入:nums = [7,2,5,10,8], m = 2 输出:18 解释: 一共有四种方法将 nums 分割为 2 个子数组。 其中
71
0
0
【LeetCode-386】字典序排数
摘要:问题 给定一个整数 n, 返回从 1 到 n 的字典顺序。 请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000。 示例 输入: 13 输出: [1,10,11,12,13,2,3,4,5,6,7,8,9] 解答 class Solution { public:
36
0
0
【LeetCode-85】最大矩形
摘要:问题 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 解答1:前缀和(O(n*m^2)) class Solution { public: int maximalRectangle(vector<vector<char>>&
60
0
0
【LeetCode-221】最大正方形
摘要:问题 在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。 解答 class Solution { public: int maximalSquare(vector<vector<char>>& matrix) { int res = 0; int m =
49
0
0
【面试题 02.05】链表求和
摘要:问题 给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。 示例 输入: (7 → 1 → 6) + (5 → 9 → 2),即617 + 295 输出: 2 → 1 → 9,即912 解答 class Sol
49
0
0
【LeetCode-173】二叉搜索树迭代器
摘要:问题 实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器: BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST
43
0
0
【LeetCode-86】分隔链表
摘要:问题 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 解答 class Solution { public: ListNode* partition(Li
51
0
0
【LeetCode-147】对链表进行插入排序
摘要:问题 对链表进行插入排序。 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表; 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入; 重复直到所有输入数据插入完为止。 解答 class Solution { pub
32
0
0
【LeetCode-328】奇偶链表
摘要:问题 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 示例 输入: 1->2->3->4-
52
0
0
【LeetCode-143】重排链表
摘要:问题 给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 给定链表 1->2->3->4, 重新排列为 1->4->2->3。 解答 class Solut
29
0
0
【LeetCode-148】排序链表
摘要:问题 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 输入: head = [-1,5,3,4,0] 输出: [-1,0,3,4,5] 解答1:归并排序 class Solution { public: ListNode* sortList(ListNode* he
37
0
0
【LeetCode-23】合并K个升序链表
摘要:问题 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 输入: lists = [[1,4,5],[1,3,4],[2,6]] 输出: [1,1,2,3,4,4,5,6] 解答1:归并排序 class Solution { public: L
39
0
0
【LeetCode-61】旋转链表
摘要:问题 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 示例 输入: head = [1,2,3,4,5], k = 2 输出: [4,5,1,2,3] 解答 class Solution { public: ListNode* rotateRight(ListNod
46
0
0
【LeetCode-518】零钱兑换 II
摘要:问题 给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。 示例 输入: amount = 5, coins = [1, 2, 5] 输出: 4 解释: 有四种方式可以凑成总金额: 5=5 5=2+2+1 5=2+1+1+1 5=1+1+1+1+1
36
0
0
【LeetCode-322】零钱兑换
摘要:问题 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每种硬币的数量是无限的。 示例 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释
45
0
0
【机器学习】逻辑回归的C++实现
摘要:代码框架与感知机一致,区别仅在于train和test函数上。 train 逻辑回归和感知机一样,也是来解决二分类问题。但输出的为当前标签为1的概率,所以和感知机只训练错误样例不同,我们需要对每个样本进行训练。 我们需要的输出范围为[0, 1],但是线性方程f(x)=wx+b的范围为负无穷
464
0
0
【LeetCode-1792】最大平均通过率
摘要:问题 一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] = [passi, totali] ,表示你提前知道了第 i 个班级总共有 totali 个学生,其中只有 passi 个学生可以通过考试。 给你一个整数
210
0
0
【LeetCode-25】K 个一组翻转链表
摘要:问题 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例 解答 class Solution { public: ListNode* reverseKGroup(
39
0
0
【LeetCode-84】柱状图中最大的矩形
摘要:问题 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 解答1:暴力(中心扩散) class Solution { public: int
56
0
0
【机器学习】感知机的C++实现
摘要:main函数 typedef vector<vector<double>> VVec; typedef vector<double> Vec; int main() { Perceptron P; // 定义一个Perceptron类 VVec train_csv, test_csv; // VVe
307
0
0
【LeetCode-331】验证二叉树的前序序列化
摘要:问题 序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。 示例 输入: "9,3,4,#,#,1,#,#,2,#,6,#,#" 输出: true 解答 class Solution { public:
29
0
0
【LeetCode-347】前 K 个高频元素
摘要:问题 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 示例 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 解答 class Solution { public: typedef pair<int, int> P; // 少写点字 struct cmp
40
0
0
【LeetCode-772】基本计算器 III
摘要:问题 实现一个基本的计算器来计算简单的表达式字符串(带括号的四则运算)。 表达式字符串只包含非负整数,算符 +、-、*、/ ,左括号 ( 和右括号 ) 。整数除法需要 向下截断 。 你可以假定给定的表达式总是有效的。 示例 输入:s = "2*( - 5+5*2)/ 3+(6/2+8)" 输出:14
657
0
0
【LeetCode-227】基本计算器 II
摘要:问题 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 示例 输入: s = " 3+5 / 2 " 输出: 5 解答 class Solution { public: int calculate(string s) { vector<int> num
46
0
0
【剑指Offer-27】二叉树的镜像
摘要:问题 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 示例 解答1:递归 class Solution { public: TreeNode* mirrorTree(TreeNode* root) { if (!root) return nullptr; // 前序操作 swap(root->
38
0
0
【剑指Offer-17】打印从1到最大的n位数
摘要:问题 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。要注意大数问题,即输出字符串。 示例 输入: n = 1 输出: [1,2,3,4,5,6,7,8,9] 解答 class Solution { public: st
42
0
0
【LeetCode-224】基本计算器
摘要:问题 实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。 1 ⇐ s.length ⇐ 3 * 105 s 由数字、'+'、'-'、'('、')'、和 ' ' 组成 s 表示一个有效的表达式 示例 输入: s = " 2-1 + 2 " 输出: 3 输入: s = "(1+(4+5+2)-
49
0
0
【剑指Offer-05】替换空格
摘要:问题 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 ** 输入:** s = "We are happy." 输出: "We%20are%20happy." 解答1:额外申请空间 class Solution { public: string replaceSpace(stri
43
0
0
【剑指Offer-56-II】数组中数字出现的次数 II
摘要:问题 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 示例 输入: nums = [3,4,3,3] 输出: 4 解答1:哈希表 class Solution { public: int singleNumber(vector<int>& num
44
0
0
【LeetCode-1047】删除字符串中的所有相邻重复项
摘要:问题 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 示例 输入: "abbaca" 输出: "ca" 解释: 例如,在 "abbaca" 中,我
57
0
0
【LeetCode-132】分割回文串 II
摘要:问题 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。 返回符合要求的 最少分割次数 。 示例 输入: s = "aab" 输出: 1 解释: 只需一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。 解答 class Solution { public: int
36
0
0
【LeetCode-131】分割回文串
摘要:问题 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 输入: s = "aab" 输出: [["a","a","b"],["aa","b"]] 解答 class Solution { publi
37
0
0
【LeetCode-5】最长回文子串
摘要:问题 给你一个字符串 s,找到 s 中最长的回文子串。 示例 输入: s = "babad" 输出: "bab" 解释: "aba" 同样是符合题意的答案。 解答1:动态规划 class Solution { public: string longestPalindrome(string s) {
47
0
0
【LeetCode-377】组合总和 Ⅳ
摘要:问题 给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。 示例 nums = [1, 2, 3] target = 4 所有可能的组合为: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1) 请
63
0
0
【LeetCode-216】组合总和 III
摘要:问题 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 说明: 所有数字都是正整数。 解集不能包含重复的组合。 示例 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]] 解答 class
33
0
0
【LeetCode-40】组合总和 II
摘要:问题 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 说明: 所有数字(包括目标数)都是正整数。 解集不能包含重复的组合。 示例 输入: cand
39
0
0
【LeetCode-39】组合总和
摘要:问题 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。 示例 输入
38
0
0
【LeetCode-491】递增子序列
摘要:问题 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。 示例 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]] 解答
45
0
0
【剑指Offer-68-II】二叉树的最近公共祖先
摘要:问题 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [3,5,1,6,
44
0
0
【剑指Offer-68-I】二叉搜索树的最近公共祖先
摘要:问题 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root = [6,2,
40
0
0
【剑指Offer-67】把字符串转换成整数
摘要:问题 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负
34
0
0
【剑指Offer-66】构建乘积数组
摘要:问题 给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。 示例 ** 输入:** [1,2,3,4,5]
38
0
0
【剑指Offer-65】不用加减乘除做加法
摘要:问题 写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。 解答 class Solution { public: int add(int a, int b) { while (b) { int c = (unsigned)(a & b) << 1; a
34
0
0
【LeetCode-503】下一个更大元素 II
摘要:问题 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。 示例 输入: [1,2,1] 输出: [2,-1
33
0
0
【LeetCode-496】下一个更大元素 I
摘要:问题 给你两个没有重复元素的数组nums1和nums2,其中nums1是nums2的子集。 请你找出nums1中每个元素在nums2中的下一个比其大的值。 nums1中数字x的下一个更大元素是指x在nums2中对应位置的右边的第一个比x大的元素。如果不存在,对应位置输出-1。 示例 输入: nums
40
0
0
【剑指Offer-63】股票的最大利润
摘要:问题 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是
71
0
0
【剑指Offer-62】圆圈中最后剩下的数字
摘要:问题 0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数
47
0
0
【剑指Offer-61】扑克牌中的顺子
摘要:问题 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。 示例 输入: [1,2,3,4,5] 输出: True 解答1:找充要条件 class Solution {
58
0
0
【剑指Offer-60】n个骰子的点数
摘要:问题 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。 示例 输入: 1 输出: [0.16667,0.16667,0.16667,0.16
67
0
0
【剑指Offer-59-II】队列的最大值
摘要:问题 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。 若队列为空,pop_front 和 max_value 需要返回 -1 示例 输入: ["MaxQueue","push_b
36
0
0
【剑指Offer-59-I】滑动窗口的最大值
摘要:问题 给定一个数组nums和滑动窗口的大小k,请找出所有滑动窗口里的最大值。 示例 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] 解答 class Solution { public: vector<int> maxSliding
49
0
0
【剑指Offer-58-II】左旋转字符串
摘要:问题 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 示例 输入: s = "abcdefg", k = 2 输出: "cdefgab" 解答1
28
0
0
【剑指Offer-58-I】翻转单词顺序
摘要:问题 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。 示例 输入: " hello world! " 输出: "world! hello" 解释:
44
0
0
【剑指Offer-57-II】和为s的连续正数序列
摘要:问题 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例 输入: target = 15 输出: [[1,2,3,4,5],[4,5,6],[7,8]] 解答 class Solutio
25
0
0
【剑指Offer-57-I】和为s的两个数字
摘要:问题 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。 示例 输入: nums = [2,7,11,15], target = 9 输出: [2,7] 或者 [7,2] 解答 class Solution { public:
34
0
0
【剑指Offer-56-I】数组中数字出现的次数
摘要:问题 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 示例 输入: nums = [1,2,10,4,1,4,3,3] 输出: [2,10] 或 [10,2] 解答 class Solution {
38
0
0
【剑指Offer-55-II】平衡二叉树
摘要:问题 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 解答 class Solution { public: bool isBalanced(TreeNode* root) { recur(root); return
28
0
0
【剑指Offer-55-I】二叉树的深度
摘要:问题 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 解答1:前序遍历+回溯 class Solution { public: int maxDepth(TreeNode* root) { if (!root) ret
43
0
0
【剑指Offer-54】二叉搜索树的第k大节点
摘要:问题 给定一棵二叉搜索树,请找出其中第k大的节点。 解答1:递归 class Solution { public: int kthLargest(TreeNode* root, int k) { if (!root || flag) return res; // 使用flag跳出递归 kthLarg
40
0
0
【剑指Offer-53-II】0~n-1中缺失的数字
摘要:问题 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 示例 输入: [0,1,3] 输出: 2 解答 class Solution { public: int missingNum
35
0
0
【剑指Offer-53-I】在排序数组中查找数字 I
摘要:问题 统计一个数字在排序数组中出现的次数。 示例 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 输入: nums = [5,7,7,8,8,10], target = 6 输出: 0 解答 class Solution { public: int searc
40
0
0
【剑指Offer-52】两个链表的第一个公共节点
摘要:问题 输入两个链表,找出它们的第一个公共节点。 示例 解答 class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode *curA = headA, *curB
43
0
0
【LeetCode-327】区间和的个数
摘要:问题 给定一个整数数组nums。区间和S(i, j)表示在nums中,位置从i到j的元素之和,包含i和j,(i ≤ j)。 请你以下标i(0 <= i <= nums.length )为起点,元素个数逐次递增,计算子数组内的元素和。 当元素和落在范围[lower, upper](包含lower和up
74
0
0
【LeetCode-493】翻转对
摘要:问题 给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。 你需要返回给定数组中的重要翻转对的数量。 示例 输入: [1,3,2,3,1] 输出: 2 解答 class Solution { public: int re
38
0
0
【剑指Offer-51】数组中的逆序对
摘要:问题 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 输入: [7,5,6,4] 输出: 5 解答 class Solution { public: int reversePairs(vector<int>& num
41
0
0
【剑指Offer-50】第一个只出现一次的字符
摘要:问题 在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。 示例 s = "abaccdeff" 返回 "b" 解答1:一次遍历 class Solution { public: char firstUniqChar(string s) { int left
38
0
0
【剑指Offer-49】丑数
摘要:问题 我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。 示例 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。 解答 class Solution { pub
50
0
0
【剑指Offer-48】最长不含重复字符的子字符串
摘要:问题 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 解答 class Solution { public: int lengthOfLongestSu
33
0
0
【剑指Offer-47】礼物的最大价值
摘要:问题 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 输入: [ [1,3,1], [1,5,1
40
0
0
【剑指Offer-46】把数字翻译成字符串
摘要:问题 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 示例 输入: 12258 输出: 5 解释: 12258有5种
41
0
0
【剑指Offer-45】把数组排成最小的数
摘要:问题 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数; 拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0。 示例 输入: [3,30,34,5,9] 输出: "3033459"
51
0
0
【剑指Offer-44】数字序列中某一位的数字
摘要:问题 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。 请写一个函数,求任意第n位对应的数字。 示例 输入: n = 11 输出: 0 解答 class Solution { publi
41
0
0
【剑指Offer-43】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(i
56
0
0
【剑指Offer-42】连续子数组的最大和
摘要:问题 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 示例 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 解答 class Solut
26
0
0
【剑指Offer-41】数据流中的中位数
摘要:问题 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一
42
0
0
【剑指Offer-40】最小的k个数
摘要:问题 输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 示例 输入: arr = [3,2,1], k = 2 输出: [1,2] 或者 [2,1] 输入: arr = [0,1,2,1], k = 1 输出:
51
0
0
【C++】排序算法
摘要:快速排序 快速排序算法是一种非线形时间比较类排序算法,它采用了分治的思想: 从数列中取出一个数(随机选择一个数。如果只取第一个数,若整个数组本身就是有序的,那时间复杂度会退化到O(n^2))作为pivot。 将数组进行划分(partition),将比基准数大的元素都移至枢轴右边,将小于等于基准数
72
0
0
【LeetCode-354】俄罗斯套娃信封问题
摘要:问题 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。 请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。 说明: 不允许旋转信封。
46
0
0
【剑指Offer-39】数组中出现次数超过一半的数字
摘要:问题 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 解答1:排序 class Solution { public: int majorityE
32
0
0
【剑指Offer-38】字符串的排列
摘要:问题 输入一个字符串,打印出该字符串中字符的所有排列。 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。 示例 输入: s = "aab" 输出: ["aab","aba","baa"]] 解答1:swap解决全排列 class Solution { public: vector<stri
37
0
0
【LeetCode-338】比特位计数
摘要:问题 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 输入: 5 输出: [0,1,1,2,1,2] 解答1:暴力方法 class Solution { public: vector<int> countBi
50
0
0
【LeetCode-304】二维区域和检索 - 矩阵不可变
摘要:问题 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。 你可以假设矩阵不可变。 会多次调用 sumRegion 方法。 你可以假设 row1 ≤ row2 且 col1 ≤ col2 。 示例 给定 matrix
43
0
0
点击右上角即可分享
微信分享提示