自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Go切片2:Go切片实现原理

一个切片是一个数组片段的描述。它包含了指向数组的指针,片段的长度, 和容量(片段的最大长度)。使用 make([]byte, 5) 创建的切片变量 s 的结构如下:长度是切片引用的元素数目。容量是底层数组的元素数目(从切片指针开始)。 关于长度和容量和区域将在下一个例子说明。进行s = s[2:4]的操作并观察切片的变化package mainimport "fmt"func main() { s := make([]byte, 5) s = s[2:4] // 长度是切片引用的元

2021-05-25 17:03:58 200

原创 Go切片1:Go的切片和数组

定义一个数组var a [4]intb := [2]string{"Penn", "Teller"}b := [...]string{"Penn", "Teller"}定义一个切片(和数组不同的是,切片类型并没有给定固定的长度。)letters := []string{"a", "b", "c", "d"}// 函数 make 接受一个类型、一个长度和一个可选的容量参数。s := make([]byte, 5, 5) // s == []byte{0, 0, 0, 0, 0}, 调用 mak

2021-05-25 16:16:52 186

原创 LeetCode48. 旋转图像 - 对角线反转和镜像的关系【图解】

2020-12-19 11:41:12 1002 1

原创 左神算法笔记: 5. 二叉树的基本算法

::二叉树不能形成环::先序、中序、后序遍历先序:对任意一个子树的处理顺序,都是先头结点、再左子树、再右子树中序:左头右后序:左右头[image:710374ED-4483-43C6-8740-52B0AB1597BA-22873-00006BA364335C85/iShot2020-12-18 20.40.44.png]非递归方式实现二叉树的先序、中序、后序任何递归函数都可以改成非递归自己设计压栈的来实现先序实现逻辑:放入head循环(如果栈不为空)出栈为head打印h

2020-12-19 11:01:43 246 1

原创 左神算法笔记: 4. 链表常见面试题

链表面试题常用的数据结构和技巧使用容器(哈希表、数组等)快慢指针eg1. 找到一个链表的中间节点eg2. 回文结构笔试:全放到栈里,一个个弹出,从首节点开始比较面试:链表的方法需要注意边界eg3. 将单向链表按某值划分成左边小、中间相等、右边大的形式笔试:把链表放入数组里,在数组上做partition面试:分成大、中、小三部分,再把各个部分之间串起来eg4. 一种特殊的单链表节点的描述如下class Node { int value; Node

2020-12-13 17:20:27 83

原创 链表中环的问题,寻找环的起点

快慢指针从a一起出发,快指针的速度是慢指针的两倍,两指针在z点相遇:a + b = 1/2 * (a + b + n(b+c)) ==> a = (n-1)(b+c) + c , where n>=1当n = 1,实际为快指针刚好超过慢指针1圈,也就是第一次相遇的时候:a = c因为快指针的速度是慢指针的两倍 -> 快指针多走的距离和慢指针总共走的距离相同 -> 第一次相遇的时候快指针比慢指针刚好多走了一个环 -> 慢指针走过的距离等于一个环的长度 -> 慢指针.

2020-12-13 15:57:30 197

原创 左神算法笔记: 3. 比较器与堆

algorithem/左神算法/基础完全二叉树一种想象的数据结构实际是组数:使用0节点左子节点:2i + 1右子节点:2i + 2父节点:( i - 1 ) / 2不使用0节点左子节点:2i右子节点:2i + 1父节点:i / 2堆排序 ::堆排序的额外空间复杂度为O(1)::先让整个数组都变成大根堆结构,建立堆的过程:从上到下的方法(生成heap),时间复杂度为O(N*logN)把堆的最大值(root)和堆末尾的值交换,然后减少堆的大小,做一

2020-12-11 02:16:54 243

原创 左神算法笔记: 2. 线段树(区间修改数)

algorithem/左神算法/基础更快速的、区间的更改、查询一些东西eg. 实现一种数据结构使得以下三种计算的时间复杂度为O(logN )void add(arr, L, R, V); :将arr数组中的第L到R的数都增加Vvoid update(arr, L, R, V);:将arr数组中的第L到R的数都修改Vint getSum(arr, L, R);:将arr数组中的第L到R的数相加需要多少空间:最好情况:恰好是N = 2^n个数字,例如8,需要2N-1个空间 < 2N的空间

2020-12-11 02:13:13 341

原创 左神算法笔记: 1. 认识复杂度、对数器、二分法与异或运算

#algorithem/左神算法/基础 #sorting #XOR评估算法优劣的核心标准时间复杂度(流程决定)额外空间复杂度(流程决定)常数项时间(实现细节决定)常数时间的操作算数运算-加减乘除位运算( >>[带符号右移]/ >>>[不带符号右移]/ <</ |/ &/ ^)赋值、比较、自增、子减数组寻址三种排序选择排序:遍历整个数组找最大,放在最后冒泡排序:相邻的两个数比较谁大谁放在后面插入排序:第k次循环的时候

2020-12-11 02:11:58 325

原创 异或运算^与算法中的应用

异或运算可以理解为是无进位相加!异或:相同为0,不同为1同或:相同为1,不同为0eg1. 不用额外变量交换两个数int a = 3;int b = 10;a = a ^ b;b = a ^ b;a = a ^ b;注意:使用此方法必须保证要有两个空间,以下的例子为让arr[0]变为零public static void main(String[] args) { int[] arr = {7, 20 , 33}; // swap(arr, 0, 0); // 结果为{0,

2020-12-07 21:20:09 137

原创 ^异或实现两数交换swap方法

^运算具有交换律和结合律-> 自反:p ^ q ^ q = p实现两数交换swap原理:int temp = a^b;int a = temp ^ a = a ^ a ^ b = b;int b = temp ^ b = a ^b ^ b = a代码public static void swap(int[] arr, int i, int j) { arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i

2020-12-07 19:28:37 284

空空如也

空空如也

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

TA关注的人

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