最近在牛客上整理常用的一些算法思路,【常用算法思路分析系列】主要是针对一些高频算法笔试、面试题目的解题思路进行总结,大部分也给出了具体的代码实现,本篇文章是对排序相关题目的思路分析。(1)对一个基本有序的有序的数组排序,选择哪种排序算法?(2)判断数组中是否有重复值,要求空间复杂度为O(1);(3)把两个有序数组合并成一个数组,第一个数组空间正好可以容纳两个数组的元素;(4)荷兰国旗问题;(5)有序矩阵(二维数组)查找;(6)最短排序子数组:对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度;(...
分类:
编程语言 时间:
2016-05-16 09:31:32
阅读次数:
365
一. 什么是数据结构: 对到底什么是数据结构这个概念,一直有很多不同的解释,也有许多不同的争论,这里只代表了我个人的认识. 数据结构:我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某 个功能(比如查找某个元素,删除某个元素等)而执行的相 ...
分类:
其他好文 时间:
2016-05-16 00:05:19
阅读次数:
173
一、算法复杂度 算法复杂度,即算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。 同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。 OK!看到此处,我想大家应 ...
分类:
编程语言 时间:
2016-05-15 13:51:49
阅读次数:
223
直接插入排序 和 折半插入排序Java实现;时间复杂度和空间复杂度分析...
分类:
编程语言 时间:
2016-05-13 14:55:25
阅读次数:
130
1. HashMap的数据结构
数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。
数组
数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;
链表
链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除...
分类:
其他好文 时间:
2016-05-13 01:51:38
阅读次数:
306
排序在各次面试的过程中问道的次数不少,冒泡排序和快速排序尤多。因此做一些总结,尤其是代码部分。
1. 冒泡排序
(1)思想
在一组数中,对当前未排好序的数,自上而下地对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的数往上冒。
(2)复杂度
平均情况-O(n^2)
最坏情况-O(n^2)(逆序有序)
最好情况-O(n)(正序有序)
空间复杂度-O(1)
(3)稳定...
分类:
编程语言 时间:
2016-05-13 01:14:13
阅读次数:
275
前言
之前老师就讲过了选择法和冒泡法,之后又提到了插入法和排序法,今天做了一个小DEMO,对比了一下四种方法的效率,当然看了很多大牛也博客,其实算法还设计了时间复杂度和空间复杂度,对于这两个概念,我只能从表面上进行理解,其中涉及到了很多数学的问题,所以就不展开写了。
选择排序
冒泡法
插入法
快速排序法...
分类:
编程语言 时间:
2016-05-13 00:21:28
阅读次数:
285
数组中出现次数超过数组长度一半的 数字题目描述:
给定 一个数组,找到数组中出现次数超过数组长度一半的数字,如数组 a[]= {0,1,2,1,1},输出为1
分析:
1,可以使用伴随数组b,遍历数组a,将值作为数组b的下标,将次数作为值,然后遍历数组b,找到次数超过一半的值,然后输出。时间复杂度为O(N),不过要增加空间复杂度。
2,我们可以先对数组进行排序,因为某个数字出现次数超过一半,...
分类:
编程语言 时间:
2016-05-12 21:58:20
阅读次数:
203
【题目链接】
题解:
首先得有一个结论:设个数大于s的数字有k个(如果k大于c,显然是TAK。这里讨论k 数字和不小于(c - k) * s,那么一定有解。
并不会证明...
用树状数组记录一下数字的个数以及数字的数字和,然后判断就可以了。
复杂度:
时间复杂度:O(mlogm),空间复杂度:O(m)。
1A。
GET:
结论题...
/* Te...
分类:
编程语言 时间:
2016-05-12 20:38:53
阅读次数:
213
题目
给定两个字符串str1和str2,返回两个字符串的最长公共子串。
举例:str1=“1AB2345CD”,str2="12345EF",返回“2345”
分析
典型的动态规划问题。假设str1的长度为m,str2的长度为n。
方法一:时间复杂度O(mn),空间复杂度O(mn)
声明大小为m*n的矩阵dp,求解二维动态规划表,行数为m,列数为n。dp[i][j]的含义是必须把s...
分类:
其他好文 时间:
2016-05-12 20:37:18
阅读次数:
135