<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[fc625的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/fc625</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; fc625]]></copyright><item><title><![CDATA[Go切片2：Go切片实现原理]]></title><link>https://blog.youkuaiyun.com/fc625/article/details/117259979</link><guid>https://blog.youkuaiyun.com/fc625/article/details/117259979</guid><author>fc625</author><pubDate>Tue, 25 May 2021 17:03:58 +0800</pubDate><description><![CDATA[一个切片是一个数组片段的描述。它包含了指向数组的指针，片段的长度， 和容量（片段的最大长度）。

使用 make([]byte, 5) 创建的切片变量 s 的结构如下：

长度是切片引用的元素数目。容量是底层数组的元素数目（从切片指针开始）。 关于长度和容量和区域将在下一个例子说明。
进行s = s[2:4]的操作并观察切片的变化
package main

import "fmt"

func main() {
	s := make([]byte, 5)
	s = s[2:4]
	// 长度是切片引用的元]]></description><category></category></item><item><title><![CDATA[Go切片1：Go的切片和数组]]></title><link>https://blog.youkuaiyun.com/fc625/article/details/117258623</link><guid>https://blog.youkuaiyun.com/fc625/article/details/117258623</guid><author>fc625</author><pubDate>Tue, 25 May 2021 16:16:52 +0800</pubDate><description><![CDATA[定义一个数组
var a [4]int
b := [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]]></description><category></category></item><item><title><![CDATA[LeetCode48. 旋转图像 - 对角线反转和镜像的关系【图解】]]></title><link>https://blog.youkuaiyun.com/fc625/article/details/111402178</link><guid>https://blog.youkuaiyun.com/fc625/article/details/111402178</guid><author>fc625</author><pubDate>Sat, 19 Dec 2020 11:41:12 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[左神算法笔记: 5. 二叉树的基本算法]]></title><link>https://blog.youkuaiyun.com/fc625/article/details/111401532</link><guid>https://blog.youkuaiyun.com/fc625/article/details/111401532</guid><author>fc625</author><pubDate>Sat, 19 Dec 2020 11:01:43 +0800</pubDate><description><![CDATA[::二叉树不能形成环::

先序、中序、后序遍历
先序：对任意一个子树的处理顺序，都是先头结点、再左子树、再右子树
中序：左头右
后序：左右头
[image:710374ED-4483-43C6-8740-52B0AB1597BA-22873-00006BA364335C85/iShot2020-12-18 20.40.44.png]
非递归方式实现二叉树的先序、中序、后序

任何递归函数都可以改成非递归
自己设计压栈的来实现

先序实现逻辑：

放入head
循环（如果栈不为空）

出栈为head
打印h]]></description><category></category></item><item><title><![CDATA[左神算法笔记: 4. 链表常见面试题]]></title><link>https://blog.youkuaiyun.com/fc625/article/details/111134471</link><guid>https://blog.youkuaiyun.com/fc625/article/details/111134471</guid><author>fc625</author><pubDate>Sun, 13 Dec 2020 17:20:27 +0800</pubDate><description><![CDATA[链表面试题常用的数据结构和技巧

使用容器（哈希表、数组等）
快慢指针



eg1. 找到一个链表的中间节点


eg2. 回文结构

笔试：全放到栈里，一个个弹出，从首节点开始比较
面试：链表的方法需要注意边界



eg3. 将单向链表按某值划分成左边小、中间相等、右边大的形式

笔试：把链表放入数组里，在数组上做partition
面试：分成大、中、小三部分，再把各个部分之间串起来



eg4. 一种特殊的单链表节点的描述如下


class Node {
		int value;
		Node ]]></description><category></category></item><item><title><![CDATA[链表中环的问题，寻找环的起点]]></title><link>https://blog.youkuaiyun.com/fc625/article/details/111124503</link><guid>https://blog.youkuaiyun.com/fc625/article/details/111124503</guid><author>fc625</author><pubDate>Sun, 13 Dec 2020 15:57:30 +0800</pubDate><description><![CDATA[快慢指针从a一起出发，快指针的速度是慢指针的两倍，两指针在z点相遇：
a + b = 1/2 * (a + b + n(b+c)) ==&gt; a = (n-1)(b+c) + c , where n&gt;=1
当n = 1，实际为快指针刚好超过慢指针1圈，也就是第一次相遇的时候：a = c

因为快指针的速度是慢指针的两倍 -&gt; 快指针多走的距离和慢指针总共走的距离相同 -&gt; 第一次相遇的时候快指针比慢指针刚好多走了一个环 -&gt; 慢指针走过的距离等于一个环的长度 -&gt; 慢指针.]]></description><category></category></item><item><title><![CDATA[左神算法笔记: 3. 比较器与堆]]></title><link>https://blog.youkuaiyun.com/fc625/article/details/111027556</link><guid>https://blog.youkuaiyun.com/fc625/article/details/111027556</guid><author>fc625</author><pubDate>Fri, 11 Dec 2020 02:16:54 +0800</pubDate><description><![CDATA[algorithem/左神算法/基础

完全二叉树

一种想象的数据结构
实际是组数：

使用0节点

左子节点：2i + 1
右子节点：2i + 2
父节点：( i - 1 ) / 2


不使用0节点

左子节点：2i
右子节点：2i + 1
父节点：i / 2






堆排序 ::堆排序的额外空间复杂度为O(1)::

先让整个数组都变成大根堆结构，建立堆的过程：


从上到下的方法(生成heap)，时间复杂度为O(N*logN)

把堆的最大值(root)和堆末尾的值交换，然后减少堆的大小，做一]]></description><category></category></item><item><title><![CDATA[左神算法笔记: 2. 线段树(区间修改数)]]></title><link>https://blog.youkuaiyun.com/fc625/article/details/111027554</link><guid>https://blog.youkuaiyun.com/fc625/article/details/111027554</guid><author>fc625</author><pubDate>Fri, 11 Dec 2020 02:13:13 +0800</pubDate><description><![CDATA[algorithem/左神算法/基础
更快速的、区间的更改、查询一些东西
eg. 实现一种数据结构使得以下三种计算的时间复杂度为O(logN )
void add(arr, L, R, V); ：将arr数组中的第L到R的数都增加V
void update(arr, L, R, V);：将arr数组中的第L到R的数都修改V
int getSum(arr, L, R);：将arr数组中的第L到R的数相加
需要多少空间：

最好情况：恰好是N = 2^n个数字，例如8，需要2N-1个空间 &lt; 2N的空间
]]></description><category></category></item><item><title><![CDATA[左神算法笔记: 1. 认识复杂度、对数器、二分法与异或运算]]></title><link>https://blog.youkuaiyun.com/fc625/article/details/111027552</link><guid>https://blog.youkuaiyun.com/fc625/article/details/111027552</guid><author>fc625</author><pubDate>Fri, 11 Dec 2020 02:11:58 +0800</pubDate><description><![CDATA[#algorithem/左神算法/基础 #sorting #XOR


评估算法优劣的核心标准

时间复杂度（流程决定）
额外空间复杂度（流程决定）
常数项时间（实现细节决定）


常数时间的操作

算数运算-加减乘除
位运算（ &gt;&gt;[带符号右移]/ &gt;&gt;&gt;[不带符号右移]/ &lt;&lt;/ |/ &amp;/ ^）
赋值、比较、自增、子减
数组寻址


三种排序

选择排序：遍历整个数组找最大，放在最后
冒泡排序：相邻的两个数比较谁大谁放在后面
插入排序：第k次循环的时候]]></description><category></category></item><item><title><![CDATA[异或运算^与算法中的应用]]></title><link>https://blog.youkuaiyun.com/fc625/article/details/110842806</link><guid>https://blog.youkuaiyun.com/fc625/article/details/110842806</guid><author>fc625</author><pubDate>Mon, 07 Dec 2020 21:20:09 +0800</pubDate><description><![CDATA[异或运算可以理解为是无进位相加！

异或：相同为0，不同为1

同或：相同为1，不同为0
eg1. 不用额外变量交换两个数



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,]]></description><category></category></item><item><title><![CDATA[^异或实现两数交换swap方法]]></title><link>https://blog.youkuaiyun.com/fc625/article/details/110825565</link><guid>https://blog.youkuaiyun.com/fc625/article/details/110825565</guid><author>fc625</author><pubDate>Mon, 07 Dec 2020 19:28:37 +0800</pubDate><description><![CDATA[^运算具有交换律和结合律
-&gt;  自反：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]]></description><category></category></item></channel></rss>