自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 资源 (1)
  • 收藏
  • 关注

原创 C/C++编程:从0到1学习libhv(linux、clion)

libhv是c++编写HTTP API 服务端/客户端最简单的库,没有之一具有如下特性:跨平台(Windows, Linux, Mac)支持https支持RESTful API支持application/json、application/x-www-form-urlencoded、multipart/form-data内置web service文件服务和indexof service目录服务可扩展多进程/多线程模型libhv简介libhv是一个跨平台的类似libevent、libev、

2020-06-30 18:18:58 5187 5

转载 Shell中的特殊变量$?-查看上一条Shell命令的退出状态码(exit status)

shell 中运行的每个命令都使用退出状态码(exit status)来告诉shell 它完成了处理。退出状态码是一个 0 ~ 255 之间的整数值,在命令结束运行时由命令传给shell。你可以捕捉这个值并在脚本中使用。查看退出状态码Linux 使用了?专属变量来保存上个执行的命令的退出状态码。你必须在要查看的命令之后马上查看或使用? 专属变量来保存上个执行的命令的退出状态码。你必须在要查看的命令之后马上查看或使用?专属变量来保存上个执行的命令的退出状态码。你必须在要查看的命令之后马上查看或使用?变量。

2020-06-30 18:06:08 2280

转载 cmake:生成动态链接库并使用

已知库函数的源文件名字叫hello.c,库函数的头文件名字叫hello.h,生成的动态链接库函数的名称叫libhello.so,目标是在/hello/install文件夹下安装这个库,以便后来调用。设库函数源文件在/home/hello/libhello目录,编译生成的中间文件夹在/home/hello/build生成库文件夹结构如下编辑文件在libhello文件夹下编辑hello.cpp文件#include "hello.h"#include <iostream>void

2020-06-30 17:46:52 15505 8

转载 C/C++编程:function

undefined symbol: _ZNSt8ios_base4InitD1[root@localhost usehellolib]# gcc main.cpp -I include/ -L lib/ -lhello -o usehello/usr/bin/ld: /tmp/cct6c7yF.o: undefined reference to symbol '_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4'//usr/lib64/libstdc++.so.6: error

2020-06-30 17:15:55 3693

转载 cmake 从入门到入土

当前centos版本cat /etc/redhat-releaseCentOS Linux release 7.6.1810 (Core)centso安装1、下载cmake官网2、解压# tar -xvf cmake-3.17.3.tar.gz# cd cmake-3.17.3/# ./configure# gmake# gmake install# cmake -version简单样例首先让我们从最简单的代码入手,先来体验下cmake是如何操作的。编写main.c

2020-06-30 14:17:54 2514 2

转载 golang:[]byte转string

golang中,字符切片[]byte转换成string最简单的方式是package main import ( "fmt" _ "unsafe") func main() { bytes := []byte("I am byte array !") str := string(bytes) bytes[0] = 'i'//注意这一行,bytes在这里修改了数据,但是str打印出来的依然没变化, fmt.Println(str)}打印信息:I

2020-06-29 17:54:18 1615

转载 golang:调用shell命令 两种方式(有无返回值)

阻塞方式主要用于执行shell命令,并且返回shell的标准输出适用于执行普通非阻塞shell命令,且需要shell标准输出的【可以用的】//阻塞式的执行外部shell命令的函数,等待执行完毕并返回标准输出func exec_shell(s string) (string, error){ //函数返回一个*Cmd,用于使用给出的参数执行name指定的程序 cmd := exec.Command("/bin/bash", "-c", s) //读取io.Writer类型的c

2020-06-29 17:17:01 3012

转载 C/C++编程:web服务器入门

引言在深入Mongoose源码剖析之前,我们应该清除web服务器是什么?它提供什么服务?怎样提供服务?使用什么协议?客户端如何唯一标识web服务器的资源?下面我们抛开Mongose,来介绍一个web服务的这些通性。web服务器:通常是指一个计算机程序(web服务器是什么?) ,在world wide web上提供诸如web页面的服务器(提供什么服务?),使用HTTP(使用什么协议?)。当然web服务器也可以指运行这个程序的计算机或者虚拟机,我们这里讲到的web服务器是指程序。本文的主要内容如下:1、

2020-06-29 09:23:00 808

原创 leetcode刷题目录

刷题参考模拟leetcode:1. 两数之和leetcode:2. 两数相加leetcode:6. Z 字形变换leetcode:7. 整数反转leetcode:8. 字符串转换整数 (atoi)dpleetcode:5. 最长回文子串排序交换类排序 – 冒泡排序 鸡尾酒排序 奇偶排序 梳子排序 侏儒排序 快速排序 臭皮匠排序 Bogo 排序选择类排序 – 选择排序 堆排序 Smooth 排序 笛卡尔树排序 锦标赛排序 圈排序插入类排序 – 插入排序 希尔排序 二叉查找

2020-06-28 09:30:33 2516 2

转载 leetcode:143. 重排链表

题目来源143. 重排链表题目描述题目解析一般解法快慢指针找到中间:奇数个:slow指向最中间的那一个。然后取得 second = slow.next, slow.next = null, first = head偶数个:slow指向中间偏右的那一个。然后second = slow.next。slow.next = null, first = headsecond链表反转把second塞入first间隙/** * Definition for singly-linked l

2020-06-28 09:18:22 309

转载 leetcode:817. 链表组件

题目来源817. 链表组件题目描述题目解析看懂题目是关键,因为缺失的结点值会将原链表断开,实际上就是让我们求有多少个相连的子链表。栈方法1:遍历链表,每个节点在G中找到则为1,否则为0,存入栈中stack[1,1,0,1,1],然后再对栈进行判断:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(i

2020-06-27 21:53:47 317

转载 leetcode:445. 两数相加 II

题目来源445. 两数相加 II题目描述题目解析反转链表2. 两数相加 的扩展/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { // 交换节点 public ListNode addTwoNum

2020-06-27 21:08:02 321

转载 leetcode:86. 分隔链表

题目来源86. 分隔链表题目描述题目解析法1创建两个链表:链表1是小于x的值,链表二是大于等于x的值,然后将链表1和链表2拼接起来/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public Li

2020-06-27 19:12:43 333

转载 leetcode:328. 奇偶链表

题目来源328. 奇偶链表题目描述题目解析class Solution { public ListNode oddEvenList(ListNode head) { if (head == null || head.next == null || head.next.next == null){ return head; } ListNode odd = head; // odd指向奇节点的末尾 L

2020-06-27 17:03:24 783

转载 leetcode:面试题 02.04. 分割链表

题目来源面试题 02.04. 分割链表题目描述题目解析双指针pre指针的左边是小于x的元素【包括pre】cur是当前正在比较的元素:如果cur.val >= x,cur = cur.next如果cur.val< x,pre.next的值和cur的值交换,pre = pre.next,cur=cur.next/** * Definition for singly-linked list. * public class ListNode { * int v

2020-06-27 16:22:00 225

转载 leetcode:147. 对链表进行插入排序

题目描述147. 对链表进行插入排序题目来源题目解析/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode insertionSortList(ListNode head) {

2020-06-27 15:19:34 270

转载 leetcode:148. 排序链表

题目来源148. 排序链表题目描述题目解析归并排序时间复杂度O(nlogn),不考虑递归栈空间的话空间复杂度是O(1)数组实现核心:21. 合并两个有序链表归并排序的核心是一个merge()函数,其主要功能是实现两个有序链表的合并。算法: 将链表从中间断开【快慢指针取中】,分成连部分,左右两边在分别分开。。。一直到只剩下一个节点【这个时候旧没有方法在拆分了】,然后就可以merge了/** * Definition for singly-linked list. * public

2020-06-27 13:38:12 638

转载 leetcode:24. 两两交换链表中的节点

题目来源24. 两两交换链表中的节点题目描述题目解析迭代模拟/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode swapPairs(ListNode head) {

2020-06-27 01:01:58 231

转载 leetcode:138. 复制带随机指针的链表

题目来源138. 复制带随机指针的链表题目描述题目解析回溯回溯算法的第一想法是将链表想象成一张图。链表中每个节点都有2个指针(图中的边)。因为随机指针给图结构添加了随机性,所以我们可能会访问相同的节点多次,这样就形成了环上图中,我们可以看到随机指针指向了前一个节点,因此形成了环。我们需要考虑这种环的实现。此方法中,我们只需要遍历整个图并且拷贝它。拷贝的意思是每当遇到一个新的没有访问过的节点,你都要创造一个新的节点。遍历按照深度优先进行。我们需要在回溯的过程中记录已经访问过的节点,否则因为

2020-06-26 23:44:51 283

转载 leetcode:109. 有序链表转换二叉搜索树

题目来源109. 有序链表转换二叉搜索树题目描述类似的题目:108. 将有序数组转换为二叉搜索树题目解析递归跟108. 将有序数组转换为二叉搜索树不同的是,数组取中很容易使用下标得到,但是链表没那么容易,不过我们可以使用快慢指针来取得终点。当获取到链表的中点作为而二叉树节点的时候,我们还需要得到该节点的左右子树由于我们得到的是一个有序链表而不是数组,我们不能直接使用下标来访问元素。我们需要知道链表中的中间元素。我们可以利用两个指针来访问链表中的中间元素。假设我们有两个指针 slow_ptr

2020-06-26 21:25:17 549

转载 leetcode:面试题 02.01. 移除重复节点

题目来源面试题 02.01. 移除重复节点题目描述题目解析set使用set或者hash表,头插法遍历链表,如果链表中的值出现过,直接进入下一个节点如果当前节点值没有出现过,加入set、使用当前节点值创建一个节点,挂载到新链表上/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) {

2020-06-24 16:49:17 279

转载 梳子排序

梳排序(Comb sort)是一种由Wlodzimierz Dobosiewicz于1980年所发明的不稳定排序算法,并由Stephen Lacey和Richard Box于1991年四月号的Byte杂志中推广。梳排序是改良自泡沫排序和快速排序,其要旨在于消除乌龟,亦即在阵列尾部的小数值,这些数值是造成泡沫排序缓慢的主因。相对地,兔子,亦即在阵列前端的大数值,不影响泡沫排序的效能。梳子排序在冒泡排序中,只比较阵列中相邻的两项,即比较的间距为1,梳排序提出此间距其实可以大于1,梳排序中,开始时的间距设.

2020-06-24 11:40:47 520 1

转载 算法:斐波那契(黄金分割法)查找算法

斐波那契数列斐波那契数列,该数列公式为F(K) = F(k-1) + F(k-2),即 1、1、2、3、5、8、13、21……。F(k-1)/f(K)随着K的递增,该数越来越接近黄金分割比例,所以该方法也叫黄金分割法。斐波那契查找算法也叫做黄金分割查找原理对于一个数组来说,如果数组长度为契波纳切数列中的某一个数字,那么我们就可以用黄金分割比例来分割该数组。当然,如果数组长度没有达到要求,那么我们可以尝试它扩大来满足要求,其实,该算法的本质也还是二分法,只不过跟插入排序法一样,也是将目标的mid值改

2020-06-23 15:21:48 3200 2

转载 算法:三分查找算法

原理三分法的原理也很简单,和二分法几乎一模一样,只不过我们分隔区间的时候,不是将区间一分为二,而是一分为三。之后,我们同样通过缩小区间的方法来确定要查找的值所在。但是:既然分成两份就能解决问题,我们为什么要分成三份呢?在回答这个问题之前,我们先来看另一个问题。在数学上,二分法究竟解决了一个什么问题?还记得二分法使用的前提吗?数组必须是有序的,所以二分法其实解决的是单调函数的求解问题。只要数组是有序的,根据函数的定义就可以看做是一个将数组下标映射到数组取值的函数。显然,这是一个单调函数,我们通过二分法

2020-06-23 15:13:23 18239 13

转载 算法:拉格朗日插值查找算法

插值查找是对二分查找的一种改进,适用于均匀分布的有序表算法思想插值查找其实是折半查找的升级版,在我们写折半查找的时候不知道大家想过没有为什么每次要折一半呢?1/4不行吗?1/8不行吗?这样我们就可以想到,是不是可以找到更精准的“折半”的方式来处理呢。肯定是可以的,比如说找字典的时候,找a这个字母,我们肯定不会从中间开始,而是偏向于字典前面一些开始。在折半查找中 :我们可以看到 “(high-low)”的系数为1/2,但是我们想找一个自适应的系数以便于找到目标数与下标为mid所对应的数更加.

2020-06-23 14:06:54 575 1

转载 查找算法之线性查找法

顺序查找(Sequential Search)又叫线性查找,是最基本的查找技术。它的查找过程为:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,如果某个记录的关键字和给定值相等,则查找成功,找到所查的记录。如果直到最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找不成功。...

2020-06-23 13:26:22 921

转载 算法:睡眠排序

构造n个线程,它们和这n个数一一对应。初始化后,线程们开始睡眠,等到对应的数那么多个时间单位后各自醒来,然后输出它对应的数。这样最小的数对应的线程最早醒来,这个数最早被输出。等所有线程都醒来,排序就结束了java实现package com.oceanstar;public class TreeNode { public static void main(String[] args) { int[] arr = {10,40,70,30,80,90,20,60,50,49.

2020-06-23 13:10:08 482

转载 算法:鸡尾酒排序

鸡尾酒排序,是冒泡排序的改良

2020-06-22 17:36:02 1062

转载 UML类图还不懂?来看看这版乡村爱情类图,一把学会!

各种排序交换类排序 – 冒泡排序 鸡尾酒排序 奇偶排序 梳子排序 侏儒排序 快速排序 臭皮匠排序 Bogo 排序选择类排序 – 选择排序 堆排序 Smooth 排序 笛卡尔树排序 锦标赛排序 圈排序插入类排序 – 插入排序 希尔排序 二叉查找树排序 图书馆排序 耐心排序归并类排序 – 归并排序 梯级归并排序 振荡归并排序 多相归并排序 Strand 排序分布类排序 – 美国旗帜排序 珠排序 桶排序 计数排序 鸽巢排序 相邻图排序 基数排序混合类排序 – Tim 排序 内省排序 Spread 排序

2020-06-22 16:47:24 264

转载 算法:基数排序

基数排序可以说是扩展了的桶式排序,比如当待排序列在一个很大的范围内,比如0到999999内,那么用桶式排序是很浪费空间的。而基数排序把每个排序码拆成由d个排序码,比如任何一个6位数(不满六位前面补0)拆成6个排序码,分别是个位的,十位的,百位的。。。。排序时,分6次完成,每次按第i个排序码来排。下面举一个例子:如果要对6个3位整数进行排序,你会怎么做?我猜想大多数人会这样做:123 123 123343 135 135362 241 241241 343 343135 36

2020-06-22 16:02:02 1919

转载 docker:使用 Dockerfile 创建镜像

引入二分查找是一种非常简单易懂的快速查找算法,生活中到处可见。例子一我们现在来做一个猜字游戏。我随机写一个 0 到 99 之间的数字,然后你来猜我写的是什么。猜的过程中,你每猜一次,我就会告诉你猜的大了还是小了,直到猜中为止。你来想想,如何快速猜中我写的数字呢?假设我写的数字是 23,猜数过程如下。(如果猜测范围的数字有偶数个,中间数有两个,就选择较小的那个。)例子2假设有1000条订单数据,已经按照订单金额从小到大排序,每个订单金额不同,并且最小单位是元。我们现在想知道支付存在金额等

2020-06-22 11:44:38 821

转载 算法:什么是计数排序

有这样一道排序题:数组中

2020-06-20 22:57:14 1482 3

转载 算法:桶排序

桶排序是将待排序集合中处于同一个值领的元素存入同一个桶中,也就是根据元素值特性将集合拆分为多个区域,则拆分后形成的多个桶,从值域上看是处于有序状态的。对每个桶中元素进行排序,则所有桶中元素构成的集合是已经排序的。快速排序是将集合拆分成两个值域,这里成为两个桶,再分别对两个通进行排序,最终完成排序。桶排序则是将集合拆分为多个桶。对每个桶进行排序,则完成排序过程。两者的不同之处在于,快排是在集合本身上进行排序,属于原地排序方式,而且对每个桶的排序方式也是快排。桶排序是提供了额外的操作空间,在额外空间上对桶进

2020-06-20 22:17:57 897

转载 算法:归并排序实现

示意图可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程现在看一下治的阶段我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将 [4,5,7,8] 和[1,2,3,6]两个已经有序的子序列,合并为最终序列 [1,2,3,4,5,6,7,8],来看下实现步骤public class MergeSort { public static void main(String[]

2020-06-20 15:10:26 238

转载 算法:归并排序理论

图说归并排序漫画:什么是归并排序?归并排序多路归并排序

2020-06-19 17:42:55 677

原创 如何构建一个大根堆

数组可以看成是一个完全二叉树,大根堆是一个完全二叉树构造大根堆例子1:[O(N)---->从下到上]因为堆是对父节点-左/右孩子节点之间的约束,所以从最后一个非叶子节点开始调整。注意每次交换后,都要对下一层的子堆进行递归调整,因为交换后有可能破坏已调整子堆的结构。堆排序例子2:[O(N)---->从下到上]1、假设给定无序序列结构如下2.此时我们从最后一个非叶子结点开始(叶结点自然不用调整,第一个非叶子结点 arr.length/2-1=5/2-1=1,也就是下面的6结点)

2020-06-18 18:18:23 31316 7

转载 算法:并查集

简单来说,动态连通性可以抽象为一幅图连线。比如下面图中,一共有10个节点,它们互不相连,分别用0 90~90 9标记并查集算法需要实现如下操作:这里说的[连通]是一种等价关系,也就是说具有如下三个性质:如上图:判断这种「等价关系」 ⾮常实⽤, ⽐如说编译器判断同⼀个变量的不同引⽤, ⽐如社交⽹络中的朋友圈计算等等。而Union-Find 算法的关键就在于 union 和 connected 函数的效率。 那么⽤什么模型来表⽰这幅图的连通状态呢? ⽤什么数据结构来实现代码呢?一般使⽤森林(若⼲棵树)

2020-06-18 11:08:34 2038

转载 leetcode:面试题28. 对称的二叉树

题目来源面试题28. 对称的二叉树题目描述题目解析递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean isSymmetric(

2020-06-17 16:17:50 196

转载 面试题68 - I. 二叉搜索树的最近公共祖先

题目来源面试题68 - I. 二叉搜索树的最近公共祖先题目描述题目解析递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode

2020-06-17 15:47:34 194

转载 leetcode:111. 二叉树的最小深度

题目来源111. 二叉树的最小深度题目描述题目解析DP算法:分治/动态规划/DFS实现方式:自底向上/递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution {

2020-06-17 14:55:03 217

onvif摄像头对接鉴权

对应文章: https://blog.csdn.net/zhizhengguan/article/details/109325688

2022-08-11

空空如也

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

TA关注的人

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