自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(171)
  • 资源 (2)
  • 收藏
  • 关注

原创 第五章 模板与群体数据(3)

顺序访问的线性群体 -- 链表链表就不进行说明了,直接上模板单链表的结点模板template <class T>class Node {private: Node<T> *next;public: T data; // 理论放到 private Node(const T& item, Node<T> *next = 0); void insertAfter(Node<T> *p);

2022-05-09 22:39:15 600

原创 第五章 模板与群体数据(2)

群体的概念群体是由多个数据元素组成的集合体 分为 线性群体 和 非线性群体 两大类,如数组与链表 线形群体中的元素按位置排列有序,可以区分为第一个元素,第二个元素等 非线性群体不用位置顺序来标识元素直接访问的线性群体--数组类静态数组是具有固定元素个数的群体,其中的元素可以通过下标直接访问 动态数组由一系列位置连续的,任意数量相同类型的元素组成 vector 就是用类模板实现的动态数组vector 容器封装任意类型的动态数组,自动创建和删除 数组下标越界检查 v.

2022-05-02 16:55:57 615

原创 第五章 模板与群体数据(1)

引入整数类型和浮点数类型求绝对值的算法,需要写两种重载函数吗?int abs(int x) { return x < 0 ? -x : x;}double abs(double x) { return x < 0 ? -x : x;}答案是不需要的函数模板就像制造业的模板一样,设定一个模板,大体的事情就被框定了针对函数来讲,既然干的事情都是一样的,那么这件事就被框定了,变化的部分就是模板外的修饰template <typenam

2022-05-02 14:36:09 422

原创 Linux 信号简述

信号是什么信号是系统响应某些条件所产生的一个事件,接收到该信号的进程会进行相应的操作信号也可以由一个进程发送给另一个进程信号的种类

2022-04-20 14:07:55 1005

原创 第四章 多态

我们在第三章是有一个预期调用通用函数实现各个派生类具体的调用的示例,但是没有实现,那个时候讲了是因为在编译阶段就已经静态绑定到基类的函数今天通过改造这个示例来实现我们的预期效果class Base1 {public: virtual void display() const; // 虚函数};void Base1::display() const { cout << "Base1::display()" << endl;}class Ba

2022-04-13 22:53:34 307

原创 第三章 类的继承

概念继承与派生是同一过程从不同的角度看保持已有类的特性而构造新类的过程成为继承 在已有类的基础上新增自己的特性而产生新类的过程称为派生被继承的已有类称为基类(父类)派生出的新类称为派生类(子类)直接参与派生出某类的基类称为直接基类基类的基类甚至更高的基类称为间接基类继承与派生的目的继承的目的:实现设计与代码的重用 派生的目的:当新问题出现原有程序无法解决(或不完全解决)时,需要对原有程序进行改造派生类的构成吸收基类成员派生类实际就包含它的全部基类.

2022-04-13 12:34:21 494

原创 第二章 数据的共享与保护

作用域函数原型作用域double area(double radius); // radius 的作用域仅在于此,不能用于程序正文其他地方局部作用域(块作用域)void fun(int a) { // a start int b = a; // b start if(b > 0) { int c; // c start ... } // c end...

2022-04-09 12:20:49 886

原创 第一章:类与对象

目录:抽象 对同一类对象的共同属性和腥味进行概括,形成先注意问题的本质,其次是实现过程或细节 数据抽象:描述某类对象的属性或状态(对象相互区别的物理量) 代码抽象:描述某类对象的共同行为特征或具有的功能 抽象的实现:类封装类定义的语法形式类成员的访问控制公有类型成员私有类型成员保护类型成员类的成员函数内联成员函数目录目录:抽象封装类定义的语法形式类成员的访问控制...

2022-04-08 17:54:09 234

原创 C语言的hashmap

在算法练习当中,常常会遇到用 hashmap 来实现的思路,通过 key-value 方便快捷的查找,增加,删除特定数据。在高级语言当中,c++或java都有一套 hashmap API可供使用,但是 C 语言却没有系统的不过开源项目为我们提供了这套工具,利用这套工具,可以方便的将自定义数据结构 hash 话官网文档:uthashhttps://troydhanson.github.io/uthash/userguide.html#_a_hash_in_cgit 仓库uthash

2022-03-28 21:20:58 4122

原创 1207. 独一无二的出现次数

地址:力扣https://leetcode-cn.com/problems/unique-number-of-occurrences/题目:给你一个整数数组arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回true;否则返回 false。示例 1:输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。示例 2:输..

2022-03-25 22:37:43 161

原创 2149. 按符号重排数组

地址:力扣https://leetcode-cn.com/problems/rearrange-array-elements-by-sign/题目:给你一个下标从 0 开始的整数数组 nums ,数组长度为 偶数 ,由数目相等的正整数和负整数组成。你需要 重排 nums 中的元素,使修改后的数组满足下述条件:任意连续 的两个整数 符号相反对于符号相同的所有整数,保留 它们在 nums 中的 顺序 。重排后数组以正整数开头。重排元素满足上述条件后,返回修改后的数组。示例 1.

2022-03-24 21:21:27 1707

原创 2164. 对奇偶下标分别排序

地址:力扣https://leetcode-cn.com/problems/sort-even-and-odd-indices-independently/题目:给你一个下标从 0 开始的整数数组 nums 。根据下述规则重排 nums 中的值:按 非递增 顺序排列 nums 奇数下标 上的所有值。举个例子,如果排序前 nums = [4,1,2,3] ,对奇数下标的值排序后变为 [4,3,2,1] 。奇数下标 1 和 3 的值按照非递增顺序重排。按 非递减 顺序排列 nums 偶数下标

2022-03-24 21:16:09 397

原创 2130. 链表最大孪生和

地址:力扣https://leetcode-cn.com/problems/maximum-twin-sum-of-a-linked-list/题目:在一个大小为n且 n为偶数 的链表中,对于0 <= i <= (n / 2) - 1的 i,第i个节点(下标从 0开始)的孪生节点为第(n-1-i)个节点 。比方说,n = 4那么节点0是节点 3的孪生节点,节点 1是节点 2的孪生节点。这是长度为 n = 4的链表中所有的孪生节点。孪生和定...

2022-03-24 21:11:54 1629

原创 排序算法之快速排序

在讲解 快速排序 之前,我们提前引入了两个问题:快速排序基石之荷兰国旗问题快速排序基石之荷兰国旗问题II如果你还未研读上面的两个题目,建议先研习一下,因为我们这章要讲解的快速排序原理就是基于上面两个问题的解决方式来做的快速排序可以分为 3 个版本:1.0 版本:荷兰国旗问题固定选择最末元素为 num 值,保证 num 前的数组内容分为两部分完成后 num 与 >num 区域的第一个元素交换,这样 num 确定好了位置剩余就是递归新的两部分代码部分:

2022-03-21 22:54:38 258

原创 快速排序基石之荷兰国旗问题II

在上一章我们讲解了快速排序基石之荷兰国旗问题这一章我们在此基础上继续扩展题目一:给定一个数组 arr,一个数 num,请把小于等于 num 的数放在数组的左边,等于 num 的数放在数组中间,大于 num 的数放在数组的右边。要求额外空间复杂度 O(1),时间复杂度 O(N)思路:以 num 为界把数组分为三部分:1. 左侧 <= num 区域2. 中间 == num 区域3. 右侧 >= num 区域那么我们可以设定一个边界的 idx,当前元.

2022-03-20 15:45:14 1110

原创 快速排序基石之荷兰国旗问题

题目一:给定一个数组 arr,一个数 num,请把小于等于 num 的数放在数组的左边,大于 num 的数放在数组的右边。要求额外空间复杂度 O(1),时间复杂度 O(N)思路:以 num 为界把数组分为两部分:1. 左侧 <= num 区域2. 右侧 >= num 区域那么我们可以设定一个边界的 idx,当前元素与 num 进行比较:1. 如果 [i] <= num,边界右侧的元素与 [i] 之间的元素是 > num 的元素,所以我们首先要将

2022-03-20 12:17:01 1258

原创 归并排序示例:小和问题

题目:在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和示例:[1,3,4,2,5]1:左边没有比 1 小的数。小和 = 03:左边比 3 小的数有 1。小和 = 1 * 14:左边比 4 小的数有 1,3。小和 = 1 * 1 + 1 * 32: 左边比 2 小的数有 1。 小和 = 1 * 15: 左边比 5 小的数有 1,3,4,2。 小和 = 1 * 1 + 1 * 3 + 1 * 4 + 1 * 2总共结果 = 1 + 1 + 3 + 1 +

2022-03-19 16:30:42 541

原创 时间复杂度之 Master 公式

递归行为时间复杂度的估算:示例: 求一个数组的最大值arr[]={3,5,6,2,8,3}分别求左侧最大值,右侧最大值,最后返回两侧最大值比较后的最大值int doGetMaxnum(int *arr, int l, int r){ if(l == r) return arr[l]; int mid = l + ( (r - l)>>1); int leftMax = doGetMaxnum(arr, l, mid); int rightMax = doGetM.

2022-03-19 10:41:35 672

原创 排序算法之归并排序

合并算法的基本思想:就是两个有序子集之间通过合并成一个大的有序集然后合并的这个大的有序集再与另一个大的有序集继续合并成更大的有序集直到完成整个数组的有序举个例子:数组 [5,3,2,6]1. 划分为两个子集2. 分别有序化3. 合并过程,分别用两个指针,依次对比子集间的元素大小,填充到额外的空间4. 将有序话的额外空间再次填充回原数组过程 2 其实就是 过程 1,3,4 的一个过程我们来看下代码实现:把数组一分为二,分别对左边,右边排序,最后再

2022-03-19 09:49:48 365

原创 排序算法之插入排序

插入排序相对于前面的:选择排序,冒泡排序 来讲是一个变化前面两种排序算法,时间复杂度都是 O(N^2),因为每一个元素都需要跟其余元素比较一次但是插入排序就不一样了,时间复杂度 O(logN),我们来看下为什么想象打斗地主这类棋牌游戏,新摸一张牌我们需要将其 插入 到适当的位置,比如:从右至左,依次与手牌比较,如果比手牌位置小,就左移一个位置插入排序也是这样的顺序,这样对于一个新的元素来讲,不一定需要完全与所有元素比较一次当插入完成后,0 ~ 当前位置就是有序的示例:

2022-03-14 10:00:38 4858

原创 排序算法之冒泡排序

相信大多数初学者都是从冒泡排序入手的,那么今日就算是复盘,加深一下印象概念:从元素 0 开始,与元素 1 比较,如果 0 > 1,那么交换接着元素 1 与 元素 2 比较,如果 1 > 2 ,交换依次进行相邻数的比较,这样一轮下来,最大之就排到最末位置下一轮接着从 0 开始,直到末尾位置 -1 ,如此循环示例:{3,5,6,2,2,3,4,1} 3<>5 {3,5,6,2,2,3,4,1} 5<>6 {3,5,6,2

2022-03-14 09:48:35 417

原创 排序算法之选择排序

先来一个简单的排序算法:选择排序概念:数组元素从 0 开始,依次与后面的元素比较,找到这一轮的最小值,然后与 0 元素交换这样最小值就到了 0 元素从 1 开始,依次与后面的元素比较,找到这一轮的最小值,然后与 1 元素交换这样最小值就到了 1 元素如此循环,每一次都能找到最小值,然后进行一个交换,这个过程就是 选择最小值的过程示例:{3,5,6,2,2,3,4,1} 1 <> 3 {1,5,6,...

2022-03-14 08:35:58 1692

原创 153. 寻找旋转排序数组中的最小值

地址:力扣https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/题目:已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0], a[1], a[2], .

2022-03-12 20:59:16 115

原创 260. 只出现一次的数字 III

地址:力扣https://leetcode-cn.com/problems/single-number-iii/题目:给定一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?示例 1:输入:nums = [1,2,1,3,2,5]输出:[3,5]解释:[5, 3] 也是有效的答案。示例 2:输入:nu.

2022-03-12 12:51:10 76

原创 521. 最长特殊序列 Ⅰ

地址:力扣https://leetcode-cn.com/problems/longest-uncommon-subsequence-i/题目:给你两个字符串a和b,请返回 这两个字符串中 最长的特殊序列的长度。如果不存在,则返回 -1。「最长特殊序列」定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。字符串s的子序列是在从s中删除任意数量的字符后可以获得的字符串。例如,"abc" 是 "aebdc" 的子序列,因为删除 "aebdc...

2022-03-10 23:05:22 120

原创 Openwrt 之学习笔记

文章目录:Openwrt 镜像安装Openwrt 编译环境搭建Openwrt 源码生成镜像Openwrt 构建Hello ipkOpenwrt 软件模块之 libubox

2022-03-10 17:25:05 699

原创 Openwrt 软件模块之 libubox

目录:libubox 模块简要libubox 库源码libubox 编译实用工具 jshn libubox 模块简要该模块是 Openwrt 的一个核心库,提供了一系列基础API,我们后续要介绍的 Ubus也会用到这个库,可见这个库是多么重要提供的功能:AVL 树,加解密,json,链表,网络socket, 事件驱动,任务管理等等├── avl.c├── avl-cmp.c├── avl-cmp.h├── avl.h├── base64.c├── bl.

2022-03-10 17:20:53 1141

原创 二叉树之AVL树

今天来细说下 AVL 树,并结合图示代码来认识并掌握 AVL 树的创建,删除,体会下 AVL 特有的自平衡性。本文涉及比较多的内容,鉴于时间关系,当你看到时可能是未完结章节,尽情期待目录:AVL 概念AVL 的旋转AVL 树代码实现(C语言)测试实例AVL 概念AVL 也是二叉树的一种,所以符合所有二叉树应有的特性,以及遍历方法与二叉树不同的是,AVL树是一颗平衡树:节点 root,左子节点的高度 与 右子节点的高度,最大差值 = 1下面看看 AV

2022-03-09 23:15:45 752

原创 1104. 二叉树寻路

地址:力扣https://leetcode-cn.com/problems/path-in-zigzag-labelled-binary-tree/题目:在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 labe.

2022-03-09 13:04:10 144

原创 1329. 将矩阵按对角线排序

地址:力扣https://leetcode-cn.com/problems/sort-the-matrix-diagonally/题目:矩阵对角线 是一条从矩阵最上面行或者最左侧列中的某个元素开始的对角线,沿右下方向一直到矩阵末尾的元素。例如,矩阵 mat 有 6 行 3 列,从 mat[2][0] 开始的 矩阵对角线 将会经过 mat[2][0]、mat[3][1] 和 mat[4][2] 。给你一个m * n的整数矩阵mat,请你将同一条 矩阵对角线 上的元素按升序排序后,返回排...

2022-03-08 16:04:35 1080

原创 1557. 可以到达所有点的最少点数目

地址:力扣https://leetcode-cn.com/problems/minimum-number-of-vertices-to-reach-all-nodes/题目:给你一个 有向无环图, n个节点编号为 0到 n-1,以及一个边数组 edges,其中 edges[i] = [fromi, toi]表示一条从点fromi到点toi的有向边。找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。你可以以任意顺序返回这些节点编号。示例 1...

2022-03-06 16:21:22 309

原创 剑指 Offer II 045. 二叉树最底层最左边的值

地址:力扣https://leetcode-cn.com/problems/LwUNpT/题目:给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。示例 1:输入: root = [2,1,3]输出: 1示例 2:输入: [1,2,3,4,null,5,6,null,null,7]输出: 7提示:二叉树的节点个数的范围是[1,104] -2^31<= Node.val &..

2022-03-05 21:37:27 1438

原创 654. 最大二叉树

地址:力扣https://leetcode-cn.com/problems/maximum-binary-tree/题目:给定一个不重复的整数数组nums 。最大二叉树可以用下面的算法从nums 递归地构建:创建一个根节点,其值为nums 中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大值 右边 的子数组后缀上构建右子树。返回nums 构建的 最大二叉树 。示例 1:输入:nums = [3,2,1,6,0,5]输出:[6...

2022-03-05 20:52:18 537

原创 859. 亲密字符串

地址:力扣https://leetcode-cn.com/problems/buddy-strings/题目:给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回true;否则返回 false 。交换字母的定义是:取两个下标 i 和 j (下标从 0 开始)且满足 i != j ,接着交换 s[i] 和 s[j] 处的字符。例如,在 "abcd" 中交换下标 0 和下标 2 的元素可以生成 "cbad" 。示例 1:...

2022-03-05 19:39:00 145

原创 112. 路径总和

地址:力扣https://leetcode-cn.com/problems/path-sum/题目:给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1]

2022-03-05 18:30:08 561

原创 599. 两个列表的最小索引总和

地址:力扣https://leetcode-cn.com/problems/minimum-index-sum-of-two-lists/题目:假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。示例 1:输入: list1 = ["Shogun", "Tapioca Express

2022-03-05 13:33:57 373

原创 997. 找到小镇的法官

地址:力扣https://leetcode-cn.com/problems/find-the-town-judge/题目:小镇里有 n 个人,按从 1 到 n 的顺序编号。传言称,这些人中有一个暗地里是小镇法官。如果小镇法官真的存在,那么:小镇法官不会信任任何人。每个人(除了小镇法官)都信任这位小镇法官。只有一个人同时满足属性 1 和属性 2 。给你一个数组 trust ,其中 trust[i] = [ai, bi] 表示编号为 ai 的人信任编号为 bi 的人。如果小镇法官存

2022-03-03 20:43:31 127

原创 870. 优势洗牌

地址:力扣https://leetcode-cn.com/problems/advantage-shuffle/题目:给定两个大小相等的数组A和B,A 相对于 B 的优势可以用满足A[i] > B[i]的索引 i的数目来描述。返回A的任意排列,使其相对于 B的优势最大化。示例 1:输入:A = [2,7,11,15], B = [1,10,4,11]输出:[2,11,7,15]示例 2:输入:A = [12,24,8,32], B = [...

2022-03-03 19:33:37 880

原创 649. Dota2 参议院

地址:力扣https://leetcode-cn.com/problems/dota2-senate/题目:Dota2 的世界里有两个阵营:Radiant(天辉)和Dire(夜魇)Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项:禁止一名参议员的权利:参议员可以让另一位参议员在这一轮和随后的几轮中丧失所有的权利。宣布胜利:...

2022-03-02 17:52:52 179

原创 337. 打家劫舍 III

地址:力扣https://leetcode-cn.com/problems/house-robber-iii/题目:小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。示例

2022-02-28 22:14:29 566

共享内存(share memory)的实现简要

共享内存(share memory)的实现简要,结合code进行描述说明,通俗易懂

2010-10-08

PacketFlow.png

bridge,route 2、3层流经过程

2010-10-08

空空如也

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

TA关注的人

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