随笔分类 -  Algorithm

算法
摘要:用数组和链表都可以实现队列,其中用数组实现的队列是顺序队列,用链表实现的队列是链式队列。顺序队列和链式队列的实现都比较好理解。 链式队列 链式队列比较好实现。 package linked_quque import ( "fmt" "log" "tx-algorithm/linkedList" ) 阅读全文
posted @ 2022-11-28 14:11 小白一只726 阅读(137) 评论(0) 推荐(0)
摘要:package linkedList import "fmt" /** go实现带头单链表基本操作 */ type ListNode struct { value interface{} next *ListNode } type LinkedList struct { head *ListNode 阅读全文
posted @ 2022-11-28 14:08 小白一只726 阅读(32) 评论(0) 推荐(0)
摘要:实现 package stack import "log" type ArrayStack struct { items []string // 存储栈元素的数组 n int // 栈的大小 count int // 栈中元素的个数 } func NewArrayStack(n int) Array 阅读全文
posted @ 2022-11-28 14:04 小白一只726 阅读(51) 评论(0) 推荐(0)
摘要:我基本上是每隔两天写一篇blog,一两个周写一篇公众号文章(因为公众号的文章往往篇幅较长,质量高一些)。 为了方便查阅,定期将公众号文章的整理一个列表到博客。 面试官提问:你如何理解OSI互联参考模型 面试官提问:人们常说TCP的三次握手是什么意思? 面试官提问:你如何理解做浏览器向服务器发送信息的 阅读全文
posted @ 2019-02-20 22:35 小白一只726 阅读(371) 评论(0) 推荐(0)
摘要:在实际开发过程中,我们有时候会遇到主线程调用子线程,要等待子线程返回的结果来进行下一步动作的业务。 那么怎么获取子线程返回的值呢,我这里总结了三种方式: Entity类 主线程等待(这个一看代码便知晓,没什么问题) Join方法阻塞当前线程以等待子线程执行完毕 通过实现Callable接口 这里又分 阅读全文
posted @ 2019-02-20 22:04 小白一只726 阅读(41502) 评论(0) 推荐(3)
摘要:之前一篇随笔介绍了二分查找的最最基本的实现,该实现要求待查找的数据是有序且不存在重复元素的数组。 而今天我们就要介绍二分查找的变体问题,待查找数据是有序但是存在重复元素的数组,主要有以下几个问题: 这个呢,就要比不存在重复元素的数组稍微复杂一些,但也不难,只要我们能够找好临界条件就事半功倍了。 原理 阅读全文
posted @ 2019-02-20 10:51 小白一只726 阅读(481) 评论(0) 推荐(0)
摘要:不是计算机相关专业毕业的,从来没用过leetcode,最近在学习数据结构和算法,用leetcode练练手。 新手上路,代码如有不妥之处,尽管指出来。 今天抽空做的第一个题:Two Sum(最简单的呃呃呃) 题目如下: 解决思路: 现有数组nums[p-r],首先将nums从小至大排序,然后将nums 阅读全文
posted @ 2019-02-15 22:49 小白一只726 阅读(239) 评论(0) 推荐(0)
摘要:二分查找特别好理解,就类似于快排和归并当中用到的分治的思想,每次取中间数与目标数相比较,然后确定是大了还是小了,区间折半。 就比如: 小红选中了1-100中的某个数字(这个数字是56),要小明来猜,产生如下对话: 小明第一次猜测:68 小红:大了 小明第二次猜测:35 小红:小了 小明第三次猜测:5 阅读全文
posted @ 2019-02-15 22:28 小白一只726 阅读(293) 评论(0) 推荐(0)
摘要:基数排序算是桶排序和计数排序的衍生吧,因为基数排序里面会用到这两种其中一种。 基数排序针对的待排序元素是要有高低位之分的,比如单词adobe,activiti,activiti就高于adobe,这个是根据ascll码来的。 现在我们可以提出一个问题,怎样对字典里面的单词进行排序呢? 比如我们现在有如 阅读全文
posted @ 2019-01-30 22:21 小白一只726 阅读(472) 评论(0) 推荐(0)
摘要:计数排序,属于桶排序特殊的一种。 当要排序n个数据的时候,如果所处的范围不大,我们可以取其中的最大值K,并将数据分散在K个桶里面, 每个桶里面的数据都是相同的(这样省去了桶内排序的时间),然后顺序取出就好啦。 当然计数排序说起来简单,写起来有些地方不好理解。 比如我们现在有2,5,3,0,2,3,0 阅读全文
posted @ 2019-01-30 21:49 小白一只726 阅读(582) 评论(0) 推荐(0)
摘要:如何在O(n)内获取一个数组比如{9, 1, 2, 8, 7, 3, 6, 4, 3, 5, 0, 9, 19, 39, 25, 34, 17, 24, 23, 34, 20}里面第K大的元素呢? 我们可以使用类似快排的分区方式,将第K大的元素限定在数组的左边或右边,递归求取。 我的Java代码实现 阅读全文
posted @ 2019-01-29 23:49 小白一只726 阅读(1183) 评论(2) 推荐(0)
摘要:我个人觉得快速排序和归并排序有相似之处,都是用到了分治的思想,将大问题拆分成若干个小问题。 不同的地方是归并排序是先把大问题拆分好了之后再排序,而快速排序则是一边拆分,一边排序。 快速排序的原理就是,针对一个数组,我们任意选取数组中的一个数,将数组中的数与它一一比较,如果小于它呢,就放左边, 大于它 阅读全文
posted @ 2019-01-29 22:59 小白一只726 阅读(914) 评论(0) 推荐(0)
摘要:归并排序是一种典型的用分治的思想解决问题的排序方式。 它的原理就是:将一个数组从中间分成两半,对分开的两半再分成两半,直到最终分到最小的单位(即单个元素)的时候, 将已经分开的数据两两合并,并且在合并的同时进行排序(先分解,再合并)。 将一个大的问题分而治之,拆分成若干个小问题,这就是分治的思想。 阅读全文
posted @ 2019-01-29 22:24 小白一只726 阅读(566) 评论(0) 推荐(0)