给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 def make( ...
分类:
其他好文 时间:
2018-08-16 10:36:12
阅读次数:
171
之前学Tarjan的时候一直理解不是很到位,温故而知新,查缺补漏一下。 Tarjan算法是用于求解有向图强连通分量的算法,它能做到线性时间的复杂度。 定义: 1.如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected)。 2.如果有向图G的每两个顶点都强连通,称G是一个强 ...
分类:
其他好文 时间:
2018-08-09 21:21:41
阅读次数:
164
求自然数幂和,就是一条公式,然后用代码实现; 公式描述如下: 可以看出只要我们预处理出每一项,就可以在线性时间内求得自然数的幂和。前面的倒数可以用递推法求逆元 预处理,组合数也可以预处理,也可以先预处理,现在关键是如何预处理伯努利数。 伯努利数满足条件,且有 那么继续得到 这就是伯努利数的递推式,逆 ...
分类:
其他好文 时间:
2018-08-09 01:19:15
阅读次数:
144
转发请注明出处:https://www.cnblogs.com/fnlingnzb-learner/p/9374732.html 一、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为 ...
分类:
编程语言 时间:
2018-07-26 23:41:00
阅读次数:
183
推荐博客 :https://blog.csdn.net/zzkksunboy/article/details/72600679 作用 线性时间解决最长回文子串问题。 思想 Manacher充分利用了回文的性质,从而达到线性时间。 首先先加一个小优化,就是在每两个字符(包括头尾)之间加没出现的字符(如 ...
分类:
其他好文 时间:
2018-07-25 11:28:52
阅读次数:
214
这是三种线性时间复杂度的排序算法,它们是用运算而不是比较来确定排序顺序的 一、基数排序 1.简介 它一种与其他排序算法完全不同的排序方法,其他的排序算法都是通过关键字之间的比较和移动来完成的,而它是采用一种多关键字的思想。 多关键字的思想:给定一组数据,我可以先按个位的大小对所有数进行排序,然后再按 ...
分类:
编程语言 时间:
2018-07-16 11:15:26
阅读次数:
202
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 异或解法: public class Solution2 { public int singleNumber(int[] ...
分类:
其他好文 时间:
2018-07-14 18:46:17
阅读次数:
105
一.算法简介 Tarjan 算法一种由Robert Tarjan提出的求解有向图强连通分量的算法,它能做到线性时间的复杂度。 我们定义: 如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图 ...
分类:
移动开发 时间:
2018-07-14 13:03:18
阅读次数:
330
排序算法,可以分为内部排序和外部排序两大种。这篇文章主要对内部排序进行介绍。内部排序又分为两类,基于比较的非线性时间类,和非比较的线性时间类。前一类又可以分为四种,交换排序(包括冒泡排序和快速排序),插入排序(包括简单插入排序和希尔排序),选择排序(包括简单选择排序和堆排序)以及归并排序;后者主要包 ...
分类:
编程语言 时间:
2018-07-09 19:50:47
阅读次数:
179
一、计数排序 二、基数排序 三、桶排序 四、对比不同排序方法 ...
分类:
编程语言 时间:
2018-07-02 21:36:57
阅读次数:
190