golang数据结构与算法
Lazyboy_Chen7
悲欢离合
展开
-
Go语言实现快速排序
快速排序原理不再赘述,以下是golang实现。其中,math/rand包中有个Perm方法:Perm returns, as a slice of n ints, a pseudo-random permutation of the integers [o,n).返回一个有n个元素的,[0,n)范围内整数的伪随机排列的切片func (r *Rand) Perm(n int) [...原创 2019-03-04 22:37:41 · 555 阅读 · 0 评论 -
Go语言实现快速选择
偶尔间看到一个问题:从海量数字中找到第k大的数脑子里蹦出来的第一个念头是堆,复杂度O(nlogk)。后来想想好像在某些情况下可以用快速选择的思想,能达到O(n)。快速选择的思想很简单,在快速排序的基础上实现,比如选择数字p为比较值,将一组数分为两半,我们将数字p的索引i与k比较就能知道第k个数字是在索引i的左边还是右边,还是恰好是i直接返回,接着只对包含k的那一边继续做相同过程就可以了。下...原创 2019-03-06 21:31:20 · 535 阅读 · 0 评论 -
Golang — Leetcode 973. K Closest Points to Origin
题意就不说了,leetcode 上都有。这道题首先想到的是将距离算出来sort后取前K(好像这样也能过),后来又想到了前一阵子刚看的快速选择,经过选择挑好第K大的值时,K即是值也是索引,所以索引K前的便是前K个最小距离。相比于快排能够少排后半部分节省时间。刚开始想到这样做的时候直接上手就开始写了,当时用一个map存储距离(key)和点(value)的关系,但是发现距离重复的情况下会有覆盖的...原创 2019-03-12 10:54:24 · 347 阅读 · 0 评论 -
Golang —— Leetcode 1015. Numbers With Repeated Digits
题意就是给出一个N,找到(0,N]范围内有多少个最少有一位重复的数字。比如121,1454符合要求,123不符合。思路: 这种问题的第一步非常关键。关于重复的题大多都要反着做,让我们找有重复的,那我们把不重复的找出来再减去就是重复的。这时我们考虑一个数字比如1942,我们把它分为两半,1000以下和1000以上。①1000以下:这种情况非常简单,排列组合,找到个十百三个位数字不同有...原创 2019-03-18 21:54:55 · 268 阅读 · 0 评论 -
Leetcode学习之路 —— Golang实现
由于之前一直在用C++,所以leetcode的题也是用C++做的,现在对golang越来越感兴趣,所以就打算用golang来做。其实leetcode中有一些题很不适合用Golang来做,同样的做法,因为两种语言数据结构底层实现不同,与C++比起来golang会麻烦很多很多。但是在有些时候还有一些优势,不管怎么样,做题就是锻炼思维,明白怎么做,能实现出来就好了。https://github.co...原创 2019-04-02 21:24:19 · 1762 阅读 · 0 评论 -
[编程题] 将满二叉树转换为求和树
给满出二叉树,编写算法将其转化为求和树什么是求和树:二叉树的求和树, 是一颗同样结构的二叉树,其树中的每个节点将包含原始树中的左子树和右子树的和。二叉树: 10 / \ -2 6 / \ / \ 8 -4 ...原创 2019-04-12 10:56:14 · 1532 阅读 · 0 评论 -
Leetcode1032.字符流 golang实现——复习字典树
1032.字符流按下述要求实现 StreamChecker 类:StreamChecker(words):构造函数,用给定的字词初始化数据结构。 query(letter):如果存在某些 k >= 1,可以用查询的最后 k个字符(按从旧到新顺序,包括刚刚查询的字母)拼写出给定字词表中的某一字词时,返回 true。否则,返回 false。treamChecker stream...原创 2019-04-22 23:02:12 · 638 阅读 · 0 评论