自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 96

原创 面试题 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 219 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 141

原创 1266. 访问所有点的最小时间

平面上有n个点,点的位置用整数坐标表示points[i] = [xi, yi]。请你计算访问所有这些点需要的最小时间(以秒为单位)。你可以按照下面的规则在平面上移动:每一秒沿水平或者竖直方向移动一个单位长度,或者跨过对角线(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。必须按照数组中出现的顺序来访问这些点。链接:https://leetcode-cn.com/problems/minimum-time-visiting-all-points两点间的距离是max(Y坐标...

2021-01-02 09:12:32 86

原创 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 162

原创 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 93

原创 面试题 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 87 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 62

原创 剑指 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 58

原创 剑指 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 45

原创 剑指 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 62

原创 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。二叉搜索树的特性是left< parent < right.对树进行遍历,当遇到一个节点n,它的值在两个输入节点的值之间,那么这个节点就是最近公共祖先。为什么?因为此时,两个节点已经分居n的左右两个子树,也就是不在n的同一颗子树中,所以n的子节点不可能是两个节点的公共祖先。class Solution {public: TreeNode* lowestCommonAncestor(TreeNode..

2020-12-23 21:33:14 56

原创 剑指 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 57

原创 剑指 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 61

原创 剑指 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 70

原创 剑指 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 66

原创 剑指 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 62

原创 剑指 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 48

原创 剑指 Offer 03. 数组中重复的数字

题目找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3解法class Solution {public: int findRepeatNumber(vector<int>& nums) { for ..

2020-12-06 23:07:59 75

原创 剑指 Offer 55 - I. 二叉树的深度

题目输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。递归解法class Solution {public: int maxDepth(TreeNode* root) { if (!root) return 0; return max(maxDepth(root->right), maxDepth(root->left)) + 1;.

2020-12-05 22:38:50 54

原创 剑指 Offer 06. 从尾到头打印链表

题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]非递归解法class Solution {public: vector<int> reversePrint(ListNode* head) { vector<int> vec; while (head) { vec.push_back(h.

2020-12-05 22:06:00 56

原创 C. Increase and Copy

C. Increase and CopyInitially, you have the arrayaaconsisting of one element11(a=[1]a=[1]).In one move, you can do one of the following things:Increase some (single) element ofaaby11(choose someiifrom11to the current length ofaaand incr...

2020-10-03 21:24:22 440 2

原创 FilterLoad加载驱动失败,返回ERROR_FILE_NOT_FOUND

记一个磨人的bug。现象是使用FilterLoad加载minifilter失败了,返回错误是找不到文件。难道驱动名称写错了?难道注册service失败了?难道……细细排查一番,均无异常。但依然file not found...万事不决读文档,MSDN中说,当minifilter被加载时,DriverEntry会被调用。灵光一现,WinDbg走起。然后发现果然是DriverEntry里出幺蛾子了,其中的初始化代码某处出错,返回了file not found.修复DriverEn

2020-10-02 09:47:01 409

原创 C++使用extern修饰const变量

假设b.cpp有变量:// in b.cppint var_b = 2333;在同一工程的a.cpp中想要使用var_b,可以如此声明:// in a.cppextern int var_b;当如果var_b是const变量呢?即是说b.cpp中var_b的声明是:// in b.cppconst int var_b = 2333;此时a.cpp的声明也加上const:// in a.cppextern const int var_b;看起来没什么问题,.

2020-05-31 16:37:39 844

原创 RtlDeleteElementGenericTable小记

实验室的产品需要添加一个驱动,其中用到了RTL_GENERIC_TABLE,也就不可避免地用到了RtlDeleteElementGenericTable。RTL_GENERIC_TABLE默认实现是伸展树,RtlDeleteElementGenericTable主要执行三个步骤:1. 使用RtlLocateNoteGenericTable查找要删除的element的位置。2. 使用RtlDelete移除element,RtlDelete会调用RtlSplay调整树结构3. 调用FreeRou

2020-05-30 21:42:32 458

原创 C++解析虚函数表

今天突发奇想,如何解析类的虚函数表,获取其中的内容?我们都知道,当存在虚函数时,编译器会为类生成一个虚函数表vtbl (virtual table),并在类对象中存放一个指向vtbl的指针vptr (virtual pointer)。所以只要找到对象的vptr,就能顺藤摸瓜找到类的vtbl,然后可以读出vtbl中的内容。那vptr在对象的什么地方?C++标准没有规定vptr存储的位...

2020-03-08 11:10:49 158

原创 PowerSploit: Exception calling "GetMethod" with "1" argument(s): "Ambiguous match found."

在安装Windows Update后使用PowerPloit时报错:Exception calling "GetMethod" with "1" argument(s): "Ambiguous match found."解决方案是将$GetProcAddress = $UnsafeNativeMethods.GetMethod('GetProcAddress')改为$Ge...

2020-02-20 21:17:44 1639

原创 1328. 破坏回文串

给你一个回文字符串palindrome ,请你将其中一个 字符用任意小写英文字母替换,使得结果字符串的字典序最小,且不是回文串。请你返回结果字符串。如果无法做到,则返回一个空串。示例 1:输入:palindrome = "abccba"输出:"aaccba"示例 2:输入:palindrome = "a"输出:""提示:1 <= palind...

2020-02-18 19:45:52 284

原创 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 375

原创 916. 单词子集

我们给出两个单词数组 A和B。每个单词都是一串小写字母。现在,如果b 中的每个字母都出现在 a 中,包括重复出现的字母,那么称单词 b 是单词 a 的子集。 例如,“wrr” 是 “warrior” 的子集,但不是 “world” 的子集。如果对 B 中的每一个单词b,b 都是 a 的子集,那么我们称A 中的单词 a 是通用的。你可以按任意顺序以列表形式返回A 中所有的通用...

2020-02-11 22:31:44 174

原创 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 204

原创 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 115

原创 递增子序列

给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是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 611

原创 memmove的实现

memmove的原型是:void*memmove(void*dst, constvoid*src, size_tcount);实现memmove有两个要点:(1)从src指向的内存拷贝count个字节到dst指向的内存中。(2)处理src和dst有重叠的情况,这是和memcpy不一样的地方。要满足条件(1)比较简单,借用memcpy的实现:...

2020-02-03 10:53:22 1262 1

原创 Cannot open include file: 'QtConcurrent': No such file or directory

假期手痒用Qt写了个便笺程序,其中文件操作用到了QtConcurrent模块。噼里啪啦,一通猛如虎的操作下来,代码写完了,愉快地build+run一套,结果报错了:(Cannot open include file: 'QtConcurrent': No such file or directory编译不过一声吼,操起鼠标查google。官方文档就是这么写的看来我是漏了QT += c...

2020-01-30 10:41:44 3157 1

原创 欢聚时代笔试题:逗号运算符

隔壁家二狗子贡献了一道来自欢聚时代(YY)的C++笔试题。问题以下程序的输出是什么?#include <iostream>int main(){ int a = 10; int b = 20; int x; // (1) x = (a, b); std::cout << x << std::endl; // (2) ...

2020-01-28 09:31:49 264

原创 为什么使用std::make_shared

目录为什么使用std::make_shared减少重复代码效率更高降低内存泄露风险为什么使用std::make_sharedstd::shared_ptr是常用的智能指针,建立一个shared_ptr对象有两种方式:// (1)std::shared_ptr<Widget> p1(new Widget);// (2)std::shared_ptr<Widget>...

2020-01-12 11:23:24 4824

空空如也

空空如也

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

TA关注的人

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