数据结构与算法
文章平均质量分 67
一块钱硬币2015
纸上得来终觉浅,绝知此事要躬行。
展开
-
时间复杂度
一、概念时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数)比如:一般总运算次数表达式类似于这样:a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+fa ! =0时,时间复杂度就是O(2^n);a=0,bO(n^3);a,b=0,cO(n^2)依此类推eg:(1) for(i=1;i //循环了n*n次,当然是O(n^2) f转载 2016-03-12 16:38:37 · 591 阅读 · 0 评论 -
求子数组最大和
求子数组的最大和题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。因为是O(N)的复杂度,因此需采用的DP的思想,原创 2016-10-17 14:51:29 · 398 阅读 · 0 评论 -
平衡二叉树详解
平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来原创 2016-09-30 20:47:35 · 33346 阅读 · 13 评论 -
快速排序两种实现方式
首先简单谈下快速排序的特点,时间复杂度O(nLog n),最差时间复杂度O(n^2),平均时间O(nLog n).因为用到了函数栈,空间复杂度为O(lg n),最差为O(n).是一种不稳定的排序方法。基本思想是分治法,这位大大的http://blog.csdn.net/morewindows/article/details/6684558 讲的非常清楚了,分治法+挖坑法,我就不多说了。就是以某个数原创 2016-09-30 11:56:02 · 684 阅读 · 0 评论 -
动态规划
前言和分治法一样,动态规划(dynamic programing)是通过组合子问题的解而解决整个问题的。注意这里的programing翻译成立规划而不是编程。维基百科上写道This is also usually done in a tabular form by iteratively generating solutions to bigger and bigger s原创 2016-10-25 16:03:25 · 204 阅读 · 0 评论 -
相邻元素差的绝对值都是1,在这样的数组中找目标元素
有这样一个数组A,大小为n,相邻元素差的绝对值都是1。如:A={4,5,6,5,6,7,8,9,10,9}。现在,给定A和目标整数t,请找到t在A中的位置。除了依次遍历,还有更好的方法么?这道题目的解法非常有趣。数组第一个数为array[0], 要找的数为y,设t = abs(y - array[0])。由于每个相邻的数字之差的绝对值为1。故第t个位置之前的数肯定都比y小。因此直接原创 2016-10-14 15:42:28 · 656 阅读 · 0 评论 -
常用排序算法Java实现
public class Sort { /** * @param args */ public static void selectSort(int[] a){ int temp = 0; int flag = 0; for (int i = 0; i < a.length; i++) { temp = a[i]; flag = i; for (int原创 2016-10-11 22:01:35 · 251 阅读 · 0 评论 -
二叉树面试常考题【JAVA】
转:http://www.2cto.com/kf/201311/259183.html package BinaryTreeSummary; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; impor原创 2016-09-21 14:49:16 · 645 阅读 · 0 评论 -
【推导】求有环单链表中的环长、环起点、链表长
求有环单链表中的环长、环起点、链表长1.判断单链表是否有环 使用两个slow, fast指针从头开始扫描链表。指针slow 每次走1步,指针fast每次走2步。如果存在环,则指针slow、fast会相遇;如果不存在环,指针fast遇到NULL退出。 就是所谓的追击相遇问题: 2.求有环单链表的环长 在环上相遇后,记录第一次相遇点为Pos,之后指针slo原创 2016-09-23 21:46:05 · 356 阅读 · 0 评论 -
JAVA实现链表面试题
这篇文章主要介绍了JAVA相关实现链表的面试题,代码实现非常详细,每一个方法讲解也很到位,特别适合参加Java面试的朋友阅读。这份笔记整理了整整一个星期,每一行代码都是自己默写完成,并测试运行成功,同时也回顾了一下《剑指offer》这本书中和链表有关的讲解,希望对笔试和面试有所帮助。本文包含链表的以下内容: 1、单链表的创建和遍历 2、求单链表中原创 2016-07-08 22:02:16 · 6024 阅读 · 2 评论 -
求海量数据的topK问题
问题描述:取给定List中的前TopK个最大的元素并输出。关键点: 1. topK个最大的元素 2. 我们并不需要顺序,因此一切涉及到sort的工作都是不必要的。 3. 要且只要topK个元素,no more needed!!因此,我们虽然用堆,但并不需要将整个list都建成堆,只需要维护一个K个元素的堆即可。原创 2016-09-17 15:44:25 · 398 阅读 · 0 评论 -
二分法,递归和非递归方式 实现(Java)
//时间复杂度:O(logn)package binarySearch;public class BinarySearch { //非递归 public static int binarySearch(int[] a,int goal){ int high = a.length - 1; int low = 0; int mid = 0; while(low <= h原创 2016-08-03 22:42:15 · 744 阅读 · 0 评论 -
每个程序员都应该收藏的算法复杂度速查表
算法复杂度这件事转:http://www.codeceo.com/article/algorithm-complexity-table.html这篇文章覆盖了计算机科学里面常见算法的时间和空间的大 O(Big-O)复杂度。我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和排序算法的优劣,以便我在面试时不会被问住。最近这几年,我面试了几家硅谷的初创企业和一些更大一些转载 2016-06-23 19:21:06 · 436 阅读 · 0 评论 -
12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用
出处:http://blog.csdn.net/han_xiaoyang/article/details/12163251。声明:版权所有,转载请注明出处,谢谢。0、前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题原创 2016-06-02 21:45:10 · 4119 阅读 · 0 评论 -
排序算法总结
花了很长时间终于把排序的基础学了一下,这段时间学了很多东西,总结一下:学的排序算法有:插入排序,合并排序,冒泡排序,选择排序,希尔排序,堆排序,快速排序,计数排序,基数排序,桶排序(没有实现)。比较一下学习后的心得。我不是很清楚他们的时间复杂度,也真的不知道他们到底谁快谁慢,因为书上的推导我确实只是小小了解,并没有消化。也没有完全理解他们的精髓,所以又什么错误的还需要高手指点。呵呵。1转载 2016-03-12 16:22:20 · 465 阅读 · 0 评论 -
Hash表
Hash表 Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组、链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。这个源于Hash表设计的特殊性,它采用了函数映射的思想将记录的存储位置与记录的关键字关联起来,从而能够很快速地进行查找。1.Hash表的设计思想 对于一般的线性表,原创 2016-10-18 17:03:13 · 481 阅读 · 0 评论