数据结构
数据结构
雪*夹雨夹*雪
这个作者很懒,什么都没留下…
展开
-
查找数组中的第K个最大元素或者数组中最大的k个元素,C++解法
题目给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4题解思路是维护一个长度为k的最小堆,堆顶是这个堆中的最小的元素;对数组的每一个元素进行遍历,如果堆元素小于k或者当前遍历的元素大于堆顶元素,那就让当前元素入堆,然后再弹出一个最小的元素原创 2022-05-02 16:26:33 · 1409 阅读 · 0 评论 -
C++生成随机字符串,UUID
Linux平台利用dev/urandom来生成随机数,再转成字符串,以下代码生成的字符串长度为两倍len.dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH Keys,SSL Keys等)需要它们提供的随机数据流。#include"log_uuid.h"#include <stdlib.h>#include <unistd.h>#include<原创 2021-08-14 18:50:48 · 2315 阅读 · 0 评论 -
linux kfifo移植到应用层
最近由于项目需要在两个线程之间传递数据,就想到了内核的kfifo无锁队列,于是移植到应用层。为了使用更加方便,添加了拆包功能。原生的kfifo是字节流类型,改造之后变成了数据报类型。就是说接收方获取数据的时候要么是获取到一个完整的数据报,要么就什么都没获取到。不会有粘包问题。头文件:#ifndef _NO_LOCK_QUEUE_H_#define _NO_LOCK_QUEUE_H_#include <stdlib.h>#include <stdio.h>#in..原创 2021-08-10 21:27:43 · 782 阅读 · 0 评论 -
C++ std::set_difference详解
算法set_difference可以用来求两个集合的差集,本文给出一个默认类型的示例和一个自定义类型的示例#include <algorithm>#include <iostream>#include <iterator>#include <string_view>#include <vector> auto print = [](const auto& v, std::string_view end = "") {..原创 2021-03-23 23:56:53 · 5617 阅读 · 0 评论 -
C++ STL 堆算法: make_heap(), push_heap(), pop_heap(), sort_heap()
在c++20中引入了几个堆相关的算法:make_heap(), push_heap(), pop_heap(), sort_heap(), is_heap, is_heap_until(),现在来开始介绍这几个函数和写一个示例。make_heap 在一个迭代器范围内构造一个堆(默认最大堆) push_heap 往一个元素插入到堆的末尾的下一个位置 pop_heap 弹出堆顶元素,并把它放到末尾位置 sort_heap 把一个堆进行排序 is_heap .原创 2021-03-14 16:46:35 · 733 阅读 · 0 评论 -
leetcode438. 找到字符串中所有字母异位词 C++解法
给定一个字符串s和一个非空字符串p,找到s中所有是p的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串s和 p的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。示例1:输入:s: "cbaebabacd" p: "abc"输出:[0, 6]解释:起始索引等于 0 的子串是 "cba", 它是 "abc" 的字母异位词。起始索引等于 6 的子串是 "bac", 它是 "abc...原创 2021-03-04 23:59:21 · 243 阅读 · 2 评论 -
高楼扔鸡蛋问题一种比较简单的解法(C++)
这个是LeetCode刷题笔记,下面这种解法提交的时候会超时,但是单独试了几个用例是正确的。题目:你将获得K个鸡蛋,并可以使用一栋从1到N共有 N层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层F ,满足0 <= F <= N 任何从高于 F的楼层落下的鸡蛋都会碎,从F楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层X扔下(满足1 <= X &...原创 2021-02-28 22:50:46 · 755 阅读 · 0 评论 -
Redis skiplists跳表
跳表是建立在普通有序链表之上的一种一种概率数据结构。可以理解为加了索引的有序链表。这里打个比方,假如把普通有序链表比作是普通公交车,因为每个公交站都停一下所以如果站比较多得时候肯定会很慢;那么跳表就相当于是特快大巴,它不会每个站都停,而是会跳过一些站点每隔几个站才停一下,显然特快大巴速度更快。我们在一个有序链表中搜索一个元素的时候,即使链表已经排好序但是也不能使用二分查找法,必须挨个节点去遍历,算法复杂度是O(n),性能太低。而跳表就是为了解决这个问题,它的搜索复杂度能达到O(log n),能够..原创 2021-02-18 15:05:10 · 114 阅读 · 0 评论 -
二叉搜索树,AVL树,红黑树,B树,B+树对比分析
二叉搜索树AVL自平衡二叉搜索树红黑树B树B+树原创 2021-01-17 17:01:03 · 627 阅读 · 0 评论