HeathXian
嵌入式 分布式后端 网络安全 主机安全
展开
-
一个竹筒10根白的竹签10根黑的-腾讯算法题
腾讯算法题 一个竹筒10根白的竹签10根黑的 求输赢概率原创 2024-02-24 11:50:33 · 151 阅读 · 0 评论 -
判断是否存在回文
给定一个字符串,请仅考虑字母和数字字符并忽略大小写,从而确定它是否是回文。"A man, a plan, a canal: Panama" 是回文。"race a car" 不是回文。原创 2023-03-18 22:47:32 · 194 阅读 · 0 评论 -
滑动窗口最大值
你可以假设 k 总是有效的,在输入数组 不为空 的情况下,1 ≤ k ≤ nums.length。输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3。给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。滑动窗口的位置 最大值。输出: [3,3,5,5,6,7]原创 2023-02-09 12:18:58 · 483 阅读 · 0 评论 -
单链表反序
2.最后注意之前的head节点的next要置NULL, head指向新的头节点。定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。输入: 1->2->3->4->5->NULL。输出: 5->4->3->2->1->NULL。1.用三个指针,沿着链表往后移动,改变next。0原创 2023-02-08 23:32:46 · 148 阅读 · 0 评论 -
动态规划解题思路
1.找子问题2.找子问题的递推关系3.填充DP数组4.优化空间复杂度原创 2022-05-04 10:18:15 · 284 阅读 · 0 评论 -
打家劫舍二
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他..原创 2022-04-27 22:13:50 · 86 阅读 · 0 评论 -
打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入..原创 2022-04-27 22:10:38 · 95 阅读 · 0 评论 -
最小花费爬楼梯
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。示例 1:输入:cost = [10,15,20]输出:15解释:你将从下标为 1 的台阶开始。- 支付 15 ,向上爬两个台阶,到达楼梯顶部。总花费为 15 。示例 2:输入:cost = [1,100,1,1,1,100,1,1,1..原创 2022-04-27 22:08:46 · 110 阅读 · 0 评论 -
动态规划 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入:n = 3输出:3解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶提示:1 <= n <= 45递归解法class Solution {pub.原创 2022-04-02 18:38:59 · 241 阅读 · 0 评论 -
动态规划-泰波那契序列
泰波那契序列Tn定义如下:T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0的条件下 Tn+3 = Tn + Tn+1 + Tn+2给你整数n,请返回第 n 个泰波那契数Tn 的值。示例 1:输入:n = 4输出:4解释:T_3 = 0 + 1 + 1 = 2T_4 = 1 + 1 + 2 = 4示例 2:输入:n = 25输出:1389537提示:0 <= n <= 37答案保证是一个 32 位整数,即ans...原创 2022-03-31 18:50:54 · 490 阅读 · 0 评论 -
动态规划-斐波那契数
斐波那契数(通常用F(n) 表示)形成的序列称为 斐波那契数列 。该数列由0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1)= 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给定n ,请计算 F(n) 。示例 1:输入:n = 2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1示例 2:输入:n = 3输出:2解释:F(3) = F(2) + F(1) = 1 + 1...原创 2022-03-31 18:51:28 · 470 阅读 · 0 评论 -
C++11 auto 类型指示符
auto声明的变量必须被初始化,以使编译器能够从其初始化表达式中推导出其类型。从这个意义上来讲,auto并非一种“类型”声明,而是一个类型声明时的“占位符”,编译器在编译时期会将auto替代为变量实际的类型。auto优势(一)auto推导的一个最大优势就是在拥有初始表达式的复杂类型变量声明时的简化代码。例如void loop(std::vector<std::string> &val){ //这里进行了较长的书写 std::vector<std::st...原创 2022-03-15 18:40:14 · 783 阅读 · 0 评论 -
算法分类规划
字符串 数组 堆、栈与队列 链表 哈希与映射 树 排序与检索 动态规划 图论 数学&位运算原创 2022-03-09 20:30:18 · 197 阅读 · 0 评论 -
62进制加法
题目:实现62进制加法0-9,a-z,A-Z例子:acz + AB方法一:通过从字符串尾部,开始相加,边加边转换。方法二:通过将62进制字符串转换成10进制字符串,然后计算完结果,在转换成62进制字符串。...原创 2022-03-01 22:56:18 · 392 阅读 · 0 评论 -
wazuh事件环形队列(堆、栈与队列)
分析完成之后的事件存到队列中,入队列函数如下:int queue_push_ex_block(w_queue_t * queue, void * data) { int result; w_mutex_lock(&queue->mutex); while (result = queue_full(queue), result) { w_cond_wait(&queue->available_not_empty, &qu..原创 2021-10-07 15:34:27 · 187 阅读 · 0 评论 -
堆(最大,最小)
离堆-班志建离堆以避沫水之害,知沫水则知离堆矣穿二江,成都中盖又一事也,辊之斯误。原创 2021-10-04 09:11:54 · 93 阅读 · 0 评论 -
指针与引用-秘诀1
指针与应用的不同引用不能指向空值,但是指针可以指向空值,需要判断是否为空。这意味这使用效率上引用要高于指针。指针可以被重新赋值以指向另一个不同的对象。 但是引用则总是指向在初始化时被指定的对象,以后不能改变。指针使用场景你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空)你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)引用使用场景如果总是指向一个对象并且一...原创 2021-07-02 19:11:34 · 245 阅读 · 0 评论 -
二叉树中第二小的节点(树)
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为2或0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。更正式地说,root.val = min(root.left.val, root.right.val) 总成立。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。示例 1:输入:root = [2,2,5,null,null,5,7]输出:5解释:最小的值是 2 ,第二小的值是 5 。...原创 2021-03-08 22:05:40 · 247 阅读 · 0 评论 -
矩阵对角线元素的和
给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。示例1:输入:mat = [[1,2,3], [4,5,6], [7,8,9]]输出:25解释:对角线的和为:1 + 5 + 9 + 3 + 7 = 25请注意,元素 mat[1][1] = 5 只会被计算一次。示例2:输入:mat = [[1,1,1,1], [1,1,1,1],...原创 2021-03-08 21:53:42 · 1557 阅读 · 0 评论 -
喝汽水问题
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?思维之门可以根据题意分析,翻译成代码,这里不做分析,直接上代码代码def water(d): w=d/3原创 2021-03-07 12:51:06 · 114 阅读 · 0 评论 -
有限个随机数排序去重
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据(用于不同的调查),希望大家能正确处理)。注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。当没有新的输入时,说明输入结束。思..原创 2021-03-07 12:47:12 · 241 阅读 · 0 评论 -
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。方法1c老实芭蕉#include<stdio.h>int main(){ char hex[128] = {0}; while(scanf("%s", hex) != EOF) { int len = strlen(hex); int sum = 0; for(int i=len-1, j=0; 1<i; i--,j++)原创 2021-03-07 12:37:38 · 3084 阅读 · 0 评论 -
在树中找两个节点最近公共祖先(树)
说明这个树是一个颗普通的树,一个节点可能包含多个叶子节点原创 2021-01-23 19:17:42 · 279 阅读 · 0 评论 -
寻找二叉树中两个节点最近公共祖先(树)
给定一颗二叉树和两个节点p和q,寻找它们的最近公共祖先?struct_node{intval; node*pleft; node*pright;}node;node*find(node*t,node*p){if(!tor!p){returnnull;} node*tt=find(t->pleft,p); if(tt){returntt;} retu...原创 2021-01-23 17:29:28 · 584 阅读 · 0 评论 -
2 两数之和-LeetCode
声明:本文题目来自leetcode题目:给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。/*示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target...原创 2021-01-10 16:08:48 · 110 阅读 · 0 评论 -
1 最大盛水容器-LeetCode
题目:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。找出 其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例图/*示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)...原创 2021-01-09 18:34:25 · 404 阅读 · 6 评论 -
strcpy函数实现
#include<stdio.h> char *strcpy(char *dst,const char *src){ if(!dst || !src) return dst; char *t = dst; while((*dst++ = *src++) != '\0'); return t;} int main(){ char d[32] = ""; char s[] = "test my strcpy"; p原创 2020-12-19 17:39:08 · 170 阅读 · 2 评论 -
将字符串转换成整数(atoi)
请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有效整数字原创 2020-12-19 14:12:25 · 349 阅读 · 2 评论 -
B-树与B+树区别
这个问题是我在看视频的时候老师提到的,虽然之前知道他们各自的索引结构但是还没有研究过原因。在网上一搜答案特别多。但是都特别的啰嗦。于是总结了这篇文章。一、B树和B+树的区别很明显,我们要想弄清楚原因就要知道B树和B+树的区别。为了不长篇大论。我们直接给出他们的形式总结他们的特点。1、B树B树是一种自平衡的搜索树,形式很简单:这就是一颗B树。针对我们这个问题的最核心的特点如下:(1)多路,非二叉树(2)每个节点既保存索引,又保存数据(3)搜索时相当于二分查找..转载 2020-12-13 16:35:01 · 724 阅读 · 0 评论 -
阿里算法题
给出一个单向链表,输出该链表的倒数第k个结点(未知链表长度)?原创 2020-12-12 11:29:43 · 255 阅读 · 0 评论 -
一个机器人位于一个 m x n 网格的左上角
不同路径(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径?)示例1:输入: m = 3, n = 2输出: 3解释: 从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向右 -> 向下2. 向右 -> 向下 -> 向右3. 向下 -> 向右 -> 向右示例..原创 2020-12-10 22:38:19 · 1533 阅读 · 0 评论 -
北京大学公开课
历史 / 文学 / 考古 / 艺术等为主65、【概率论】112集,何书元主讲。http://www.bilibili.com/video/av7706616/1、【社会学概论】65集,卢晖临主讲。https://www.bilibili.com/video/av11075715/2、【夏文化探索】6集,李伯谦主讲。https://www.bilibili.com/video/av125...原创 2020-02-11 17:31:21 · 1223 阅读 · 0 评论 -
双链表反序(链表)
双链表定义typedef struct _dNode{ int data; struct _dNode *pre; struct _dNode *next;}DNode;反序int ReverseDoubleList(DNode * h){ if(!h || !h->next) { printf("DLinkedNode:...原创 2019-10-16 21:10:41 · 308 阅读 · 0 评论 -
删除单链表中值为data所有节点
删除单链表中元素值为ddata的所有节点typedef struct _slist{ int data; struct _slist * pnext;}slist; #if 0输入参数: slist **phead:指向链表指针的指针,因为链表头节点可能会被改变。 int ddata: 删除链表节点值为ddata的节点...原创 2019-10-16 21:07:59 · 770 阅读 · 1 评论 -
内存对齐问题
从80X86结构看内存对齐问题 最近在学习《The art of Assembly language》,该书对80X86 CPU的内存子系统结构,进行了一个比较详细的介绍,并使我对内存对齐的理解更加深入。内存访问机制 内存的写入操作:CPU把需要写入的地址放入地址总线,把需要写入的数据放到数据总线,把控制总线置为写入操作。内存子系统根据地址总线选定内转载 2013-03-05 10:48:56 · 984 阅读 · 0 评论 -
哈希表
基本思想:在记录的存储地址和它的关键字之间建立一个确定的对应关系;这样,不经过比较,一次存取就能得到所查元素的查找方法。哈希函数: 在记录的关键字与记录的存储地址之间建立的一种对应关系叫哈希函数。 哈希函数是一种映象,是从关键字空间到存储地址空间的一种映象。可写成:addr(ai) = H(ki) ,其中ii是表原创 2015-04-25 12:08:08 · 846 阅读 · 0 评论 -
分红包算法
自己的想法红包生成算法:1,利用随机函数,产生最大,最小红包之间的数。(这样的话,数据之间的落差太大,没有意思)2,使红包能够近似正太分布就符合自然规律些。怎样构造正太分布效果呢?a,二次函数,对轴线定点大于零。网上的算法:http://blog.cqcoder.com/微信红包的算法实现探讨/原创 2015-07-23 20:40:41 · 869 阅读 · 0 评论 -
分组密码 算法 基本概念 加密过程
代换,S盒,扩散和混淆,这些概念构成了分组密码学的基础。如果明文和密文的分组长度都为n比特,则明文的每一个分组都有2n个可能的取值;代换:为使加密运算可逆(即解密运算可行),明文的每一个分组都应产生唯一的一个密文分组(多对一),这样的变换是可逆的,称明文分组到密文分组的可逆变换为代换。S盒:一般地,对n比特的代换结构,密钥的大小是n*2n比特。如对64比特的分组,密钥大小应该是64*264比特,难...原创 2015-07-12 18:28:31 · 7807 阅读 · 0 评论 -
查找
二分查找又称折半查找 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 优点:是比较次数少,查找速度快,原创 2014-06-04 18:01:50 · 928 阅读 · 0 评论 -
快速排序
数组A[p......r]被划分成两个(可能为空)子数组A[p.....q-1] 和A[q+1....r],使得A[p....q-1]中的每个元素都小于等于A(q),而且,左边的部分比arrkey小,而右边的部分大于arrkey,同时,arrkey的位置也确定了。解决:通过递归调用快速排序,对子数组A[p.....q-1] 和A[q+1....r]排序。合并:因为两个子数组是就地排序的,将他们的合并不需要操作:整个数组A[p....r]已排序。2.将1中的左边的部分,和右边的部分,分别进行1中的操作。原创 2015-02-26 15:02:20 · 682 阅读 · 1 评论