
算法
记录算法一题多解以及一些疑惑
小虎随笔
这个作者很懒,什么都没留下…
展开
-
hyperscan技术
Hyperscan是一个高性能的正则表达式匹配库,设计用于高速、大规模和并发的匹配需求。它最初是由Intel开发的,现在已经是一个开源项目。Hyperscan是许多安全和网络应用中的关键组件,因为它可以非常快速地在大量文本中搜索多个正则表达式模式。其中使用hyperscan分为四个过程:①用户需要先调用Hyperscan编译函数来生成一个数据库;②然后为运行期的匹配分配一个scratch内存;③以数据库、scratch内存和提供的用户回调函数作为输入触发hs_scan()进行匹配;原创 2023-09-21 16:15:24 · 1290 阅读 · 0 评论 -
二叉树的中序遍历
树的中序遍历原创 2022-10-06 17:48:53 · 318 阅读 · 0 评论 -
回文数解法
回文数解法原创 2022-10-06 08:24:01 · 178 阅读 · 0 评论 -
C语言实现带哨兵节点的双向链表
C语言实现带哨兵节点的双向链表原创 2022-10-05 08:06:46 · 226 阅读 · 0 评论 -
交叉引用生成器
交叉引用生成器原创 2022-10-02 17:30:02 · 260 阅读 · 0 评论 -
反转[start end]之间字符串,如abcde->cdeab
反转字符串中的连续字符原创 2022-10-02 01:38:00 · 97 阅读 · 0 评论 -
手写string类
手写string原创 2022-10-02 01:36:40 · 174 阅读 · 0 评论 -
手写一个栈
C++手写栈原创 2022-10-02 01:34:40 · 133 阅读 · 0 评论 -
priority_queue(大顶堆、小顶堆)
TOP k的实现(大顶堆)原创 2022-09-29 19:07:41 · 1920 阅读 · 0 评论 -
二叉搜索树中第k小的元素
目录题目:解法一:迭代dfs题目:给定一个二叉搜索树的根节点root,和一个整数k,请你设计一个算法查找其中第k个最小元素(从 1 开始计数)。示例 1:输入:root = [3,1,4,null,2], k = 1输出:1解法一:迭代dfsclass Solution: def kthSmallest(self, root, k): """ :type root: TreeNode ...原创 2021-05-10 01:48:57 · 327 阅读 · 0 评论 -
环形链表
题目:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos是-1,则在该链表中没有环。注意:pos不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回true。 否则,返回false。进阶:你能用O(1)(即,常量)内存解决此问题吗?示例 1:...原创 2021-05-10 00:57:23 · 256 阅读 · 0 评论 -
回溯法
1转载 2021-04-30 10:15:24 · 127 阅读 · 0 评论 -
动态规划之滚动数组思想
一、定义让数组滚动起来,每次都使用固定的几个存储空间,来达到压缩,节省存储空间的作用。起到优化空间,主要应用在递推或动态规划中。因为在动态规划中当前项只依靠前几项,所以就不需要设定很大的数组,存放所有中间变量,可以把用不着的变量覆盖掉,这样设定的数组大小就大大的减小了。例如:(优化前) long long d[80]; d[0]=1; d[1]=1; for(i=2;i<80;i++) { d[i]=d[i-1]+d[i-2.转载 2021-04-20 22:22:35 · 576 阅读 · 0 评论 -
验证回文串
题目:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false解法1:双指针法string类型获取长度:str.length()isalnum() 用以判断字符是否是数字和字母tolower() 把字母转为小写思路:c...原创 2021-04-20 09:50:12 · 116 阅读 · 0 评论 -
合并两个有序数组
题目:给你两个有序整数数组nums1 和 nums2,请你将 nums2 合并到nums1中,使 nums1 成为一个有序数组。初始化nums1 和 nums2 的元素数量分别为m 和 n 。你可以假设nums1 的空间大小等于m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:nums1...原创 2021-04-16 13:53:42 · 194 阅读 · 0 评论 -
strcpy源码分析
1转载 2021-04-12 11:01:23 · 526 阅读 · 0 评论 -
strcmp源码分析
微软源码:int strcmp(const char* str1, const char* str2){ int ret = 0; while(!(ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1) { str1++; str2++ } if (ret < 0) { return -1; } else if (ret > 0) { return 1; } ret原创 2021-04-02 09:39:32 · 1310 阅读 · 0 评论 -
算法题:找多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入:[3,2,3] 输出:3解1:(众数+1,非众数-1)class Solution {public: int majorityElement(vector<int>& nums) { int val = 0, num; for(int i :...原创 2021-03-30 21:42:13 · 717 阅读 · 0 评论 -
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
例:输入: [2,2,1]输出: 1解1:异或class Solution {public: int singleNumber(vector<int>& nums) { int num = 0; for(int i = 0; i < nums.size(); ++i) num = num^nums[i]; return num; }};解析:Q1:^什么意思?A原创 2021-03-28 23:53:13 · 759 阅读 · 0 评论 -
选择排序优化---每进行一次循环同时找到最小值和最大值
一、优化思路选择排序算法的思路是每次挑选出最小值或者最大值,而优化就是每一次循环既找到最小值,又找到最大值,这样在内层循环只需要遍历数组的一半次数即可。二、代码#include <iostream>using namespace std;//要针对两种情况://第一,当前最小值下标和当前最大值下标不需要移动,无需处理;//第二,当前最小值的下标的数组存的是最大值,最大值下标(不处理)中的数组存的是最小值,只需要替换一次void remove_abnormal_si.原创 2021-03-22 21:30:26 · 1089 阅读 · 0 评论 -
八大排序的稳定性,时间复杂度、空间复杂度、稳定性
纠正:快排空间复杂度为O(logn)。原创 2021-03-22 19:56:38 · 149 阅读 · 0 评论