自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 golang双指针快速排序

选中间位置作为基准,比它值小的移动到左边,比它大的值移动到右边。然后把基准值和末位元素交换(方便比较和移动)。定义两个指针left(起始位置0), right(起始位置len(arr) - 2), 循环和基准值比较,每次比较确定一个位置,移动指针,直到不满足left <= right.时间复杂度:平均为O(nlogn), 最慢为O(n^2)。粗略计算时间复杂度主要分为2个部分,分区(O(n))和递归(O(logn)), 相乘为O(nlogn)。,不依赖额外空间复杂度,但不是。空间复杂度:O(1)

2024-03-20 10:33:53 314

原创 golang实现循环队列

当容量为k时,我们初始化一个容量为k+1的数组arr,方便区分队列空和满。当(rear+1) % len(arr) == front时,判断队列为满;当rear==front时,判断队列为空;

2024-03-19 00:12:18 437

原创 etcd入门-(1)安装篇

etcd本地集群安装

2024-03-03 22:03:09 506

原创 K8S学习线路图

K8S学习线路图。

2023-10-20 14:23:01 61

原创 shuffle洗牌算法

shuffle算法保证每个数字出现在每个位置的概率是相等的。Knuth shuffle洗牌算法实现。

2023-10-20 11:23:24 74

原创 https原理

在这里插入图片描述](https://img-blog.csdnimg.cn/85ad83e1117840a796013ccac901ba77.png。转载:https://cloud.tencent.com/developer/article/1601995。

2023-10-12 14:31:50 50

原创 java协程并发控制

execute执行任务,每个任务执行时间不同,任务结束调用countDown计数,latch.await()会阻塞等待所有任务结束后,继续执行。类似golang的 waitgroup。java协程并发控制。

2023-10-10 11:30:09 33

原创 php laravel开发环境搭建

本文基于docker-compose搭建nginx + php + laravel快速开发框架。前置准备: 本机安装docker-compose, php包管理器composer。

2023-10-07 17:20:58 40

原创 golang实现多生产者多消费者模式

多生产者、多消费者,利用通道传递数据,WaitGroup控制生产者、消费者执行结束。

2023-05-24 11:11:30 710

原创 go语言实现堆排序

因此,我们可以从堆顶取出元素, 与数组最后一位交换,然后重新维护堆的性质,再取堆顶元素和最后第二位交换…长度为n的数组,最后一个元素下标为n-1, 所以它的父级下标为 (n-1-1) / 2 = n/2 - 1。堆排序指利用堆的性质进行排序的算法。当我们要给下标为i的节点,调整为满足堆的性质可以这样定义一个方法。注意: 我们需要从最后一个父节点开始调整堆。大顶堆:所有父节点的值大于大于子节点的值。小顶堆:所有父节点的值小于大于子节点的值。这是一个未排序的数组,对应的二叉堆。通常我们用数组来实现堆,

2023-03-17 15:23:48 424

原创 go语言GC原理

golang GC原理三色标记清除法写屏障技术三色标记清除法原理:第一步:标记开始,把所有对象放到白色集合中(这一步需 STW)第二步:从根对象开始遍历,把遍历到的白色对象放到灰色集合中第三步:开始遍历灰色对象,把灰色对象所引用的白色对象从白色集合移到灰色集合,同时把遍历过的灰色对象移到灰色集合中第四步:重复第三步,直到灰色集合中没有对象第五步:剩余白色集合中的对象就是不可达对象,视为垃圾,清除掉写屏障技术在标记的过程中,对象的引用可能会改变,导致一些对象被引用最后任然为白色,被清除掉

2021-12-12 21:05:14 388

原创 生成括号

题目: 输入一个正整数n,输出n对括号所有合法的情况leetcode链接package mainimport ( "fmt")func main() { fmt.Println(getAllKuohao(3))}func getAllKuohao(n int) []string { var ret []string _getAllKuohao(0, 0, 2 * n, "", &ret) return ret}func _getAllKuohao(left,

2021-05-19 10:08:29 82

原创 两个协程交替顺序打印字符串

思路:利用无缓冲通道的阻塞特性func printStr(s string) { ch1 := make(chan int) ch2 := make(chan int) go func() { for i:=0; i<len(s); i++ { ch1 <- i if i % 2 == 0 { fmt.Println("g1:", string(s[i])) } <- ch2 } }() go func() { for i:=0;

2021-05-18 14:16:24 427

原创 合并区间

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].思路:先排序,再做比较/* * @lc app=leetcode.cn id=56 lang=javascript * * [56] 合并区间 */// @lc code=start/** * @param {number[][]} intervals * @return

2021-05-13 11:38:17 78

原创 go语言基础知识汇总图谱

2021-03-10 14:09:57 90

原创 从无序数组中找到所有比左边大比右边小的元素

package mainfunc GetPivotElements(arr []int) []int { length := len(arr) if length < 3 { return []int{} } minIndex := make([]int, length) minIndex[length-1] = arr[length-1] for i := length - 2; i >= 0; i-- { if arr[i] < minIndex[i+1] {

2021-02-22 14:09:24 1037

原创 实现Promise

'use strict';const PENDING = 'pending';const FULFILLED = 'fulfilled';const REJECTED = 'rejected';function Promise(executor) { const _this = this; this.state = PENDING; // 状态 this.value = undefined; // 成功结果 this.reason = undefined; // 失败原因

2021-01-26 17:39:05 142

原创 原生js实现call

'use strict';function newCall() { const ctx = arguments[0]; ctx.fn = this; const args = [ ...arguments ].slice(1); const result = ctx.fn(...args); delete ctx.fn; return result;}Function.prototype.newCall = newCall;const a = { id: 'xxx',

2021-01-26 16:51:27 79

原创 合并两个有序数组

给你两个有序整数数组 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 = [1], m = 1

2021-01-26 10:38:51 60

原创 合并两个有序链表

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。输入:1->2->4, 1->3->4输出:1->1->2->3->4->4/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func mergeTwoLists(l1 *ListNode, l2 *

2021-01-26 09:37:56 63

原创 golang实现二叉树前序、中序、后序遍历

type TreeNode struct { Value int Left *TreeNode Right *TreeNode}// 前序遍历func preorderTraversal(node *TreeNode) { if node == nil { return } fmt.Println(node.Value) preorderTraversal(node.Left) preorderTraversal(node.Right)}// 中序遍历func midOr

2020-12-17 17:22:05 601

原创 (摩尔投票法)在一次选举投票中,有一个候选人的投票超过了50%,在选票中找出这个候选人。

思路:投票法,定义两个变量,一个记录当前候选人编号,一个记录候选人票数。遍历,遇到相同的编号计数加1,不同的减1,为0时,更换候选人编号。func getMaxVoteNum(arr []int) int { major := arr[0] count := 0 for i := 0; i < len(arr); i++ { if major == arr[i] { count++ } else { if count == 0 { major = arr[i]

2020-12-17 17:16:45 272

原创 golang实现判断链表是否有环

一个单向链表,判断链表中是否存在环,如果存在环找到环的入口位置并返回,如果不存在环则返回空。思路:定义快、慢指针,从链表头开始,快指针每次走两步,慢指针每次走一步,如果相遇,说明有环。碰撞之后慢指针回到链表头部,快慢指针每次走一步,第一次相遇就是环入口。func getLinkCircle(head *Node) *Node { fast := head last := head cur := head for cur != nil && cur.Next != nil {

2020-12-17 17:14:22 1090

原创 golang实现算法题合集二

1. 判断链表是否有环,如果有环找到环入口思路:定义快、慢指针,从链表头开始,快指针每次走两步,慢指针每次走一步,如果相遇,说明有环。碰撞之后慢指针回到链表头部,快慢指针每次走一步,第一次相遇就是环入口。func getLinkCircle(head *Node) *Node { fast := head last := head cur := head for cur != nil && cur.Next != nil { last = last.Next fast =

2020-12-09 11:00:52 228

原创 golang实现算法题合集一

1. 找到一个数组中第二大的数思路: 定义一个最大值和第二大值变量,遍历一次数组。需要注意的是最大值可能有多个。func getMax(arr []int) int { // 初始化 maxNum := arr[0] secondMaxNum := arr[1] if maxNum < secondMaxNum { maxNum, secondMaxNum = secondMaxNum, maxNum } for i := 0; i < len(arr); i++ { i

2020-12-08 17:49:09 513

原创 go语言实现基本排序(二)

归并排序func MergeSort(arr []int) []int { if len(arr) < 2 { return arr } mid := len(arr) / 2 left := arr[0:mid] right := arr[mid:] return Merge1(MergeSort(left), MergeSort(right))}func Merge(left, right []int) []int { var result []int for len(

2020-12-03 22:39:23 110

原创 golang之翻转字符串

解题思路: 以字符串中间字符为中心,遍历交换前后字符来达到翻转的目的, 任何语言都可以这样实现。我们只需要求出字符串到长度就可以了,请看下面的例子: str := "hello世界" fmt.Println(len(str))运行结果:11是不是跟你想象的有点不一样。我们都知道在golang中字符串是由[]byte实现的, 求字符串的长度就是求字节数组的长度,而一个中文字符在unicode下占2个字节,在utf-8中占三个字节,golang的默认编码就是utf-8。所以hello世界的长度

2020-11-26 14:50:05 1499

原创 go语言实现基本排序(一)

1.冒泡排序(Bubble Sort)比较相邻的两个数大小,交换位置。平均时间复杂度O(n^2), 最好情况下为O(n), 空间复杂度为O(1)。func BubbleSort(arr []int) []int { for i := 0; i < len(arr); i++ { for j := 0; j < len(arr)-i-1; j++ { if arr[j] > arr[j+1] { arr[j], arr[j+1] = arr[j+1], arr[j]

2020-11-26 11:59:58 473

原创 golang之flag包详解

在golang中有很多方法来处理命令行参数,简单情况下可以不使用任何库,直接使用os.Args;但是golang标准库提供了flag包来处理命令行参数;还有第三方提供的处理命令行参数的库cobra、cli。flag包绑定解析参数有三种定义方式flag.xxx() 例如:flag.Int, flag.String, 返回解析变量类型的指针package mainimport ( "flag" "fmt")func main() { host := flag.Stri

2020-11-25 15:55:02 14857

原创 列表推倒式+递归 快速排序

快速排序的思想:选取一个列表一个元素作为基准,小于列表的元素放在基准左边,大于基准的元素放在右边。本例选择第一个元素为基准,递归终止条件为len(list)&lt;=1import randomdef qsort(L): if len(L) &lt;= 1: return L return qsort([lt for lt in L[1:] if lt &...

2018-07-11 23:33:03 303

原创 创建一个django项目

版本说明: python:3.6.5 django:2.0.7 配置好环境后,在目标文件夹,按住shift点击鼠标右键,在此处打开命令窗口,在黑屏终端下出入: django-admin startproject myproject进入工程目录 会看到有以下文件: manage.py myproject 创建项目后,会生成一...

2018-07-07 23:37:34 922

空空如也

空空如也

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

TA关注的人

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