数据结构和算法
技术搬砖工
技术搬砖工交流微信: monky2020
展开
-
java面试题
因为ArrayList底层是数组实现的,根据下标查询不需要比较,查询方式为,首地址+(元素长度*下标),基于这个位置读取相应的字节数就可以了,所以非常快;增删会带来元素的移动,增加数据会向后移动,删除数据会向前移动,所以影响效率。原创 2014-05-22 16:02:52 · 442 阅读 · 0 评论 -
Lesson: Interfaces
The core collection interfaces encapsulate different types of collections, which are shown in the figure below. These interfaces allow collections to be manipulated independently of the details of the翻译 2014-08-12 18:19:49 · 444 阅读 · 0 评论 -
ArrayList实现的删除重复元素的算法
线性结构:数组 动态数组(List)Vector ArrayList public class test{public static void main(String[] args){List list=new ArrayList();list.add("dog");list.add("cat");list.add("dolphin");list.add原创 2014-09-09 22:05:28 · 675 阅读 · 0 评论 -
鸡兔同笼问题java暴力求解算法
public class A{public static void main(String[] args)int HEAD=50;int FOOT=120;for(int x=0;Xint y=HEAD-x;if(x*2+y*4==FOOT){System.out.println("x="+x +","+y="+y);} }}原创 2014-09-09 23:44:52 · 3948 阅读 · 0 评论 -
Set接口实现的差集
Set接口:main(){String[] a={"zhang","wang","li","wu","han"};String[] b={"zhang,数学,88","zhang,语文,88","zhang,英语,78","wu,数学,99","wu,英语,59","tang,数学,77"} Set sa=new HashSet();for(int原创 2014-09-09 23:18:04 · 540 阅读 · 0 评论 -
图的存储结构
图的存储结构除了要存储图中各个顶点的本身的信息外,同时还要存储顶点与顶点之间的所有关系(边的信息),因此,图的结构比较复杂,很难以数据元素在存储区中的物理位置来表示元素之间的关系,但也正是由于其任意的特性,故物理表示方法很多。常用的图的存储结构有邻接矩阵、邻接表、十字链表和邻接多重表。 8.2.1邻接矩阵表示法 对于一个具有n个顶点的图,可以使用n*n的矩阵(二维数转载 2014-08-29 15:42:40 · 442 阅读 · 0 评论 -
LinkedList笔记
LinkedList也像ArrayList一样,实现了List接口,但是他执行某些操(在List中间的插入和删除)时比ArrayList更高效,但是随即访问方面差一些方法说明:getFirst()和element()完全一样,他们都返回列表的头(第一个元素)而并不删除它们,如果List为空则抛出NotSuchElementExceptionpeek()方法与这两个稍有差原创 2014-09-12 23:44:27 · 787 阅读 · 0 评论 -
Stack笔记
package com.hephec;import java.util.*;public class Statck{private LinkedList}原创 2014-09-12 23:46:54 · 718 阅读 · 0 评论 -
Set笔记
import com.hephec01;public class HashSetTest{public static void main(String[] args){Random rand=new Random();Set hash=new HashSet();for(int i=0;ihash.add(rand.nextInt(30));System.out.pri原创 2014-09-13 00:03:48 · 764 阅读 · 0 评论 -
java插入排序的实现
//Simple insertion sortpublic static void insertionSort(Object obj){for(int p=1;pObject temp=a[p];//记住p位置的数组值int j=p;//记住p位置for(;j>0&&temp.compareTo(a[j-1])//依次向前比较a[j]=a[j-1];}}原创 2014-09-16 22:36:23 · 746 阅读 · 0 评论 -
最大子序列求和问题
最大子序列求和问题题目:给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 输入格式:输入第1行给出正整数 K (输出格式:在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。输入样例:6-2 11 -4 13 -5 -2输出样例20限制转载 2015-01-01 22:04:33 · 893 阅读 · 0 评论 -
字符串匹配的KMP算法
字符串匹配的KMP算法作者: 阮一峰日期: 2013年5月 1日字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常转载 2015-03-08 10:31:07 · 389 阅读 · 0 评论 -
约瑟夫环问题两解
约瑟夫环问题两解继续笔试准备ing……分享一下昨天做到的其中一题,其实题目很老,也做过n遍了,但复习起来也是颇有韵味,同时还发现另一种妙解,感觉不错的。问题描述: 约瑟夫环问题(Josephus) 用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。(约瑟夫环问题 Josephus)解法一(My So转载 2015-03-22 11:33:42 · 551 阅读 · 0 评论 -
15个使用频率极高的基础算法题(附完整代码)
15个使用频率极高的基础算法题(附完整代码)分类: 算法浅析 笔试题2014-08-23 07:33 189人阅读 评论(1) 收藏 举报目录(?)+]合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素一般来说,合并两个已经有序的数组,首先是开一个能存的下两个数组的第三个数组,但是题目中已经说了,其中一转载 2014-08-23 13:51:42 · 580 阅读 · 0 评论 -
B树、B-树、B+树、B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关转载 2014-08-11 12:29:52 · 425 阅读 · 0 评论 -
Java中的递归原理分析
2013-01-08 11:01:37 解释:程序调用自身的编程技巧叫做递归。程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,转载 2014-08-10 23:59:30 · 513 阅读 · 0 评论 -
微软数据结构和算法面试题
微软的22道数据结构算法面试题(含答案) 1、反转一个链表。循环算法。 1 List reverse(List l) { 2 if(!l) return l; 3 list cur = l.next; 4 list转载 2014-05-22 16:07:04 · 732 阅读 · 0 评论 -
数据结构
1.栈和队列的共同特点是(只允许在端点处插入和删除元素)4.栈通常采用的两种存储结构是(线性存储结构和链表存储结构)5.下列关于栈的叙述正确的是(D) A.栈是非线性结构B.栈是一种树状结构C.栈具有先进先出的特征D.栈有后进先出的特征6.链表不具有的特点是(B)A.不必事先估计存储空间 B.可随机访问任一元素C.插入删除不需要移动元素 D.所需空原创 2014-05-22 16:09:45 · 700 阅读 · 0 评论 -
数据结构面试
数据结构与算法面试题转载转自:http://hi.baidu.com/geogre_jsj/blog/item/e4b98fd2aab5aa3611df9b92.html由于这些题,实在太火了。所以,应广大网友建议要求,在此把之前已整理公布的前80题, 现在,一次性分享出来。此也算是前80题第一次集体亮相。 此些题,已转载 2014-05-22 16:13:09 · 1024 阅读 · 1 评论 -
大数据算法
第一部分、十道海量数据处理面试题1、海量日志数据,提取出某日访问百度次数最多的那个IP。 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率转载 2014-05-22 16:53:33 · 746 阅读 · 0 评论 -
HashMap实现原理分析
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。转载 2014-06-05 00:39:21 · 360 阅读 · 0 评论 -
约瑟夫问题数学解法
约瑟夫问题数学解法对于约瑟夫问题,今天看到了一篇好帖子,是用数学方法处理的,感觉还不错的无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。我们注意到原问题仅仅是要求出最后的胜利者的序号,而不是要读者模拟整个过程。因此如果要追求效转载 2014-06-05 18:45:27 · 863 阅读 · 0 评论 -
java实现二分法查找
public class BinarySearch { static int[] itns = new int[]{1,2,3,4,5,6,7,8,9,11,111,323,3443};//必须是有序的才可以 public static void main(String[] args) { int num = binar转载 2014-07-19 14:13:18 · 979 阅读 · 0 评论 -
java 递归生成目录
import java.io.File; public class DirRecursion { // mkdirs() public static void mkDir(File file) { if (file.getParentFile().exists()) { file.mkdir(); } else {转载 2014-07-19 14:19:59 · 5745 阅读 · 0 评论 -
【C语言/C++】 栈和队列
栈的应用①数制转换:将一个非负的十进制整数N转换为另一个等价的基为B的B进制数的问题,很容易通过"除B取余法"来解决。【例】将十进制数13转化为二进制数。 解答:按除2取余法,得到的余数依次是1、0、1、1,则十进制数转化为二进制数为1101。 分析:由于 最先得到 的余数是转化结果的 最低位 ,最后得到的余数是转化结果的最高位,因此很容易用栈来解决。具体算法如下:转载 2014-05-25 22:29:17 · 822 阅读 · 0 评论 -
模2除法
关于一个二进制数1111000 除以1101,模2除法的商为1011,余数为111.这个结果不同于十进制除法。所以特记下。具体步骤如下:#第一步 1111000 1101 0010000 ----余数,商为1,只要第一位非0商就是1 #第二步,每步移一位,当起始位为0时,除以0;为1时除以除数。 010000 0000 010000转载 2014-05-25 10:38:35 · 23796 阅读 · 8 评论 -
递归的工作原理
理解递归的工作原理 为了理解递归的工作原理,你需要追踪递归调用的执行过程,所以让我们来进行这项工作。追踪一个递归函数的执行过程的关键是理解函数中所声明的变量是如何存储的。当函数被调用时,它的变量的空间是创建于运行时堆栈上的。以前调用的函数的变量扔保留在堆栈上,但他们被新函数的变量所掩盖,因此是转载 2014-08-11 00:09:58 · 2197 阅读 · 0 评论 -
模式匹配算法
算法目的:确定子串在主串中第一次出现的位置两种算法:BF,KMP(重点掌握)一:BF算法1.特点:主串的指针需回溯,速度慢;2.算法思想:当主串T(长为m)和子串S(长为n)的比较字符不相等时,主串的指针i需要指向之前开始比较的位置的后面一个字符(相应的子串的指针j需要重新指到1),,这样依次拿子串T和主串的一个连续子字符串比较知道两个串相等为止。转载 2014-08-10 23:36:18 · 1476 阅读 · 0 评论 -
java数据结构面试题
1、面试题,字符串String s =”sfds55d66s76455dfg32434eertertre”;怎么样把非数字全部去除,只保留数字?可以使用正则表达式完成,如:s.replaceAll(“[^0-9]“,”"),这样非数字就全部去除了,只保留数字了。 2、面试题,如果一个List中放了十个Student对象,需要按照年龄排序,如何实现?可以实现Comparable接口或转载 2014-05-22 16:05:03 · 9588 阅读 · 1 评论