LeetCode
cs_zh_xi
No warnings, no errors
展开
-
219. 存在重复元素 II
给定一个整数数组和一个整数k,判断数组中是否存在两个不同的索引i和j,使得nums [i] = nums [j],并且 i 和 j的差的 绝对值 至多为 k。链接:https://leetcode-cn.com/problems/contains-duplicate-ii解法1:遍历nums,使用hash记录nums[i]的下标,如果nums[i]在hash中已经存在,比较下标差值。class Solution {public: bool containsNe...原创 2021-01-06 21:58:56 · 120 阅读 · 0 评论 -
面试题 17.05. 字母与数字
给定一个放有字符和数字的数组,找到最长的子数组,且包含的字符和数字的个数相同。返回该子数组,若存在多个最长子数组,返回左端点最小的。若不存在这样的数组,返回一个空数组。示例 1:输入: ["A","1","B","C","D","2","3","4","E","5","F","G","6","7","H","I","J","K","L","M"]输出: ["A","1","B","C","D","2","3","4","E","5","F","G","6","7"]示例 2:输入: [原创 2021-01-03 10:18:44 · 264 阅读 · 1 评论 -
1295. 统计位数为偶数的数字
给你一个整数数组nums,请你返回其中位数为偶数的数字的个数。这道题目很简单,之所以要记录一下,是因为遇到了log精度的问题。求一个十进制数字N的位数,可以利用对数求解:int(log(N) / log(10) + 1),但log进行的是浮点数运算,自然有精度问题,比如log(100)可能是1.99999,而不是2。所以还是朴素的不断除以10靠谱,而且可能还比log更快。好吧,我刚刚才知道有log10,捂脸 :)...原创 2021-01-02 09:43:42 · 172 阅读 · 0 评论 -
1266. 访问所有点的最小时间
平面上有n个点,点的位置用整数坐标表示points[i] = [xi, yi]。请你计算访问所有这些点需要的最小时间(以秒为单位)。你可以按照下面的规则在平面上移动:每一秒沿水平或者竖直方向移动一个单位长度,或者跨过对角线(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。必须按照数组中出现的顺序来访问这些点。链接:https://leetcode-cn.com/problems/minimum-time-visiting-all-points两点间的距离是max(Y坐标...原创 2021-01-02 09:12:32 · 108 阅读 · 0 评论 -
1608. 特殊数组的特征值
给你一个非负整数数组 nums 。如果存在一个数 x ,使得 nums 中恰好有 x 个元素 大于或者等于 x ,那么就称 nums 是一个 特殊数组 ,而 x 是该数组的 特征值 。注意: x 不必 是 nums 的中的元素。如果数组 nums 是一个 特殊数组 ,请返回它的特征值 x 。否则,返回 -1 。可以证明的是,如果 nums 是特殊数组,那么其特征值 x 是 唯一的 。解法1:将数组从大到小排列,在[1, nums.size()]范围内枚举x的值。class Sol.原创 2020-12-29 22:30:03 · 267 阅读 · 0 评论 -
1619. 删除某些元素后的数组均值
给你一个整数数组arr,请你删除最小5%的数字和最大5%的数字后,剩余数字的平均值。与标准答案误差在10-5的结果都被视为正确结果。class Solution {public: double trimMean(vector<int>& arr) { sort(arr.begin(), arr.end()); size_t cnt = arr.size() * 0.05; double sum ...原创 2020-12-29 21:32:09 · 126 阅读 · 0 评论 -
面试题 10.01. 合并排序的数组
给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。初始化A 和 B 的元素数量分别为m 和 n。示例:输入:A = [1,2,3,0,0,0], m = 3B = [2,5,6], n = 3输出:[1,2,2,3,5,6]说明:A.length == n + m解答:注意m或n可能为0class Solution {public: void merge(vecto...原创 2020-12-27 18:18:12 · 118 阅读 · 1 评论 -
461. 汉明距离
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数x和y,计算它们之间的汉明距离。解答:z=x xor y,求z二进制表示中1的个数。class Solution {public: int hammingDistance(int x, int y) { int distance = 0; int z = x ^ y; while (z) { if (z & 1)...原创 2020-12-27 17:30:56 · 84 阅读 · 0 评论 -
剑指 Offer 54. 二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第k大的节点。思路中序遍历树,回溯时k-1,至0时,当前节点就是所求。class Solution {public: int kthLargest(TreeNode* root, int k) { _node = nullptr; _k = k; _kthLargest(root); return _node->val; }private: void _kthLar原创 2020-12-27 16:59:17 · 80 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。解法1:最直接的解法就是,将数组排序,取中间的元素(若数组size为奇数)或中间两个元素任意一个(若数组size为偶数)。因为下标范围是0到size()-1, 所以中间元素的位置取(0 + size() - 1) / 2class Solution {public: int majorityElement(vector<int>& n.原创 2020-12-24 22:10:10 · 67 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。class Solution {public: int hammingWeight(uint32_t n) { int cnt = 0; while (n) { if (n & 1) ++cnt; .原创 2020-12-24 21:27:56 · 91 阅读 · 0 评论 -
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。二叉搜索树的特性是left< parent < right.对树进行遍历,当遇到一个节点n,它的值在两个输入节点的值之间,那么这个节点就是最近公共祖先。为什么?因为此时,两个节点已经分居n的左右两个子树,也就是不在n的同一颗子树中,所以n的子节点不可能是两个节点的公共祖先。class Solution {public: TreeNode* lowestCommonAncestor(TreeNode..原创 2020-12-23 21:33:14 · 81 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I
题目统计一个数字在排序数组中出现的次数。解答二分查找class Solution {public: int search(vector<int>& nums, int target) { int i = 0, j = nums.size() - 1; int pos = -1; while (i <= j) { pos = (i + j) / 2; if (n原创 2020-12-23 20:49:24 · 82 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序
题目输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: ...原创 2020-12-08 23:02:28 · 89 阅读 · 0 评论 -
剑指 Offer 55 - II. 平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。class Solution { int depth(TreeNode* root) { if (!root) return 0; int d1 = depth(root->left); if (d1 == -1) return -1; int d原创 2020-12-08 21:37:46 · 95 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
题目输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。解法class Solution {public: ListNode* getKthFromEnd(ListNode* head, int k) { ListNode* temp = head; while (k.原创 2020-12-07 21:35:37 · 91 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
题目一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。解法1遍历nums,遇到第一个i满足nums[i] != i即是所求。class Solution {public: int missingNumber(vector<int>& nums) { for (size_t i = 0; i < nums.size(); ++原创 2020-12-07 18:35:31 · 87 阅读 · 0 评论 -
剑指 Offer 27. 二叉树的镜像
class Solution {public: TreeNode* mirrorTree(TreeNode* root) { if (!root) return nullptr; root->right = mirrorTree(root->right); root->left = mirrorTree(root->left); swap(root->right, r...原创 2020-12-07 18:10:58 · 74 阅读 · 0 评论 -
1328. 破坏回文串
给你一个回文字符串palindrome ,请你将其中一个 字符用任意小写英文字母替换,使得结果字符串的字典序最小,且不是回文串。请你返回结果字符串。如果无法做到,则返回一个空串。示例 1:输入:palindrome = "abccba"输出:"aaccba"示例 2:输入:palindrome = "a"输出:""提示:1 <= palind...原创 2020-02-18 19:45:52 · 332 阅读 · 0 评论 -
792. 匹配子序列的单词数
给定字符串 S 和单词字典 words, 求words[i]中是S的子序列的单词个数。示例输入:S = "abcde"words = ["a", "bb", "acd", "ace"]输出: 3解释: 有三个是S 的子序列的单词: "a", "acd", "ace"。注意:所有在words和S里的单词都只由小写字母组成。S 的长度在[1, 50000]...原创 2020-02-15 21:01:46 · 439 阅读 · 0 评论 -
916. 单词子集
我们给出两个单词数组 A和B。每个单词都是一串小写字母。现在,如果b 中的每个字母都出现在 a 中,包括重复出现的字母,那么称单词 b 是单词 a 的子集。 例如,“wrr” 是 “warrior” 的子集,但不是 “world” 的子集。如果对 B 中的每一个单词b,b 都是 a 的子集,那么我们称A 中的单词 a 是通用的。你可以按任意顺序以列表形式返回A 中所有的通用...原创 2020-02-11 22:31:44 · 212 阅读 · 0 评论 -
825. 适龄的朋友
人们会互相发送好友请求,现在给定一个包含有他们年龄的数组,ages[i]表示第 i 个人的年龄。当满足以下条件时,A 不能给 B(A、B不为同一人)发送好友请求:age[B]<= 0.5 * age[A]+ 7age[B]> age[A]age[B]> 100 &&age[A]< 100否则,A 可以给 B 发送好友请求。...原创 2020-02-10 21:55:37 · 253 阅读 · 0 评论 -
268. 缺失数字
给定一个包含 0, 1, 2, ..., n中n个数的序列,找出 0 .. n中没有出现在序列中的那个数。示例 1:输入: [3,0,1]输出: 2示例2:输入: [9,6,4,2,3,5,7,0,1]输出: 8说明:你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?来源:力扣(LeetCode)链接:https://leetcode-...原创 2020-02-07 16:03:43 · 141 阅读 · 0 评论 -
递增子序列
给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是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]]说明:给定数组的长度不会超过15。 数组中的整数范围是[-100,100]。 给定数组中可...原创 2020-02-06 21:49:20 · 665 阅读 · 0 评论