算法
文章平均质量分 86
云中风影
互联网java工程师,iOS工程师
展开
-
java求连续子数组的和最大
题目描述:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。思路:我们可以使用分治法或者减治法来处理这个问题。分治法 目标:把1个大问题分成2个小问题,2个小问题还可以再分,直到问题规模小的可以简单解决。将该数组等分成两个子数组,假如知原创 2014-05-04 10:19:14 · 3103 阅读 · 0 评论 -
希尔排序
希尔排序Shell Sort是基于插入排序的一种改进希尔排序的时间性能优于直接插入排序的原因:当文件初态基本有序时直接插入排序所需的比较和移动次数均较少。第一块希尔排序介绍准备待排数组[6 2 4 1 5 9]首先需要选取关键字,例如关键是3和1(第一步分成三组,第二步分成一组),那么待排数组分成了以下三个虚拟组:[6 1]一组[2 5]原创 2015-03-13 09:51:04 · 379 阅读 · 0 评论 -
快速排序
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列转载 2015-03-11 09:10:25 · 343 阅读 · 0 评论 -
二叉搜索树的插入,删除
先来介绍一下,一棵非空的二叉搜索树满足以下特征:1.每个结点都有一个作为搜索依据的关键码,所有结点的关键码互不相同。2.左子树(如果存在)上的所有结点的关键码均小于根结点的关键码。3.右子树(如果存在)上的所有结点的关键码均大于根结点的关键码。4.根结点的左右子树也都是二叉搜索树。比如下图就是一棵二叉搜索树:下面来详细介绍一下原创 2014-06-01 21:59:53 · 1409 阅读 · 0 评论 -
Java最小堆实现
package boke.heap1; /** * 堆结点 * * @since jdk1.5及其以上 * @author 毛正吉 * @version 1.0 * @date 2010.05.24 * */ public class Node { private int iData; // 结点数据是整型转载 2014-06-02 22:14:26 · 2231 阅读 · 0 评论 -
邻接矩阵存储的图
java实现用邻接矩阵(相邻矩阵)实现图,缺点是矩阵中大量的0元素会耗费大量的存储空间public class Graph { final int MAX_VERTEX = 10;// 最多10个顶点 Vertex[] vertex;// 顶点数组 int[][] adjacency;// 邻接矩阵 int numOfVertex;// 当前图原创 2014-06-03 23:46:34 · 1222 阅读 · 0 评论 -
KMP
好工具-站长资讯、经验、工具分享平台首页互联网网站运营站长工具网络编程当前位置: 好工具 >> 网络编程 >> .Net编程字符串模式匹配——BF算法&KMP算法在字符串模式匹配的学习中,对于没有学过的数据结构与算法的来讲,可能首先就会想起将模式字符串和目标字符串逐个去比较,直到匹配为止,这就学术上说的“朴素”算法,这算法原创 2014-05-21 15:51:27 · 546 阅读 · 0 评论 -
java实现循环链表
public class CircularLinkedList { private Node head; private int length; //the length of the list public CircularLinkedList() { head = new Node(null, head); len原创 2014-05-13 08:47:37 · 537 阅读 · 0 评论 -
用java实现单链表
public class Node { private Object data; private Node next; Node(Object data,Node next){ this.data = data; this.next = next; } public Object getData() {原创 2014-05-12 21:12:18 · 527 阅读 · 0 评论 -
数据结构的Java实现——顺序表
顺序表: 线性表的顺序表是,指的是用一组地址连续的存储单元一次存储线性表的数据元素。以元素在计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。只要确定了存储线性表的起始位置,线性表中任何一数据元素都可以随机存取,所以线性表的存储结构是一种随机存取的存储结构。由于高级程序设计语言中的数组类型也具有随机存取的特性,因此,通常都用数组来描述数据结构中的顺序存储结构。优点——随原创 2014-05-11 13:09:14 · 618 阅读 · 0 评论 -
JAVA实现双向链表
转其实java.util.LinkedList就是一个双链表:public class DoubleLinkedList{ // 节点类Node private static class Node { Object value; Node prev = this; Node next = this; Node(O原创 2014-05-10 21:59:26 · 726 阅读 · 0 评论 -
Java实现算法归并排序(MergeSort)
归并排序 归并排序 (merge sort) 是一类与插入排序、交换排序、选择排序不同的另一种排序方法。归并的含义是将两个或两个以上的有序表合并成一个新的有序表。归并排序有多路归并排序、两路归并排序 , 可用于内排序,也可以用于外排序。这里仅对内排序的两路归并方法进行讨论。 1.两路归并排序算法思路①把 n 个记录看成 n 个长度为1的有序子表;②进行两两归并使记录关键字有序,原创 2014-05-07 09:29:48 · 2137 阅读 · 0 评论 -
三种方法求最大连续子数组的和
转载请注明出处:http://blog.csdn.net/ns_code/article/details/20942045 这是一道考的烂的不能再烂的题目,但是依然有很多公司乐于将这样的题目作为笔试或面试题,足见其经典。 问题是这样的:一个整数数组中的元素有正有负,在该数组中找出一个连续子数组,要求该连续子数组中各元素的和最大,这个连续子数组便被称作原创 2014-05-03 12:33:18 · 564 阅读 · 0 评论 -
选择排序
基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止public static void selectSort(int[]a){ int minIndex=0; int temp=0; if((a==nul原创 2015-03-13 17:24:57 · 327 阅读 · 0 评论