栈、队列、链表都有他们各自的好处,同样的也有弊端的存在。
如果我想要一个有序的数组和链表这个当然很好实现。现在我要在这几个数据结构中查找一个值。先说数组,因为是有序的通过二分查找很快的就可以找到。查找的效率还是很高的,但如果要是插入呢,为了保证有序,我要先找到插入位置,然后再将比插入数字大的数字依次向后移动;这时的第一反应就是链表!他打插入速度很快,只要改变指针的指向就可以了。但是链表大查找要从头开始找啊。只有知道了前一个元素的地址才能知道下一个地址。所以链表查找起来又费劲了。这时候就有人引进了...
分类:
编程语言 时间:
2015-08-20 13:12:44
阅读次数:
132
首先介绍一下什么是二分法查找。
顾名思义二分法即多次将待查数组的长度折半,但前提条件时待查找数组中的数据需要是已经排序好了的数据。
主要思想:
对于待查找数组arr[low,high],其中high=arr.length-1,待查找元素des
(1)确定数组中间位置mid=(low+high)/2
(2)将查找值des与arr[mid]进行比较,若相等,则直接返回该位置;否则确定新的查找位置,继续二分查找。区域确定如下:如果arr[mid]>des由数组的有序性可知
arr[mid,mid+1..........
分类:
编程语言 时间:
2015-08-20 13:09:32
阅读次数:
118
java八大经典算法:冒泡、选择、快速、插入、希尔、堆、归并、基数
1.算法实现类
package com.algorithm;
/**
*
* @Title: BubbleSort.java
* @Copyright: Copyright (c) 2005
* @Description:
*
* JAVA六大经典算法
* ...
分类:
编程语言 时间:
2015-08-19 16:44:21
阅读次数:
210
问题描述:求一个数组的最大k个数,如,{1,5,8,9,11,2,3}的最大三个数应该是,8,9,11
问题分析:
1.解法一:最直观的做法是将数组从大到小排序,然后选出其中最大的K个数,但是这样的解法,复杂度是O(logn*n),但是有时候并不需要排序,用简单的选择排序,或者是冒泡排序,那么就K轮的交换或者是选择,就可以得出结论,复杂度是O(n*k),当K很大的时候排序可能是更好的解...
分类:
编程语言 时间:
2015-08-18 19:35:18
阅读次数:
155
题目: 3 个数和问题
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note:
Elements in a triplet (a,b...
分类:
其他好文 时间:
2015-08-16 18:25:29
阅读次数:
173
题目:与3数和最接近的和
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would...
分类:
其他好文 时间:
2015-08-16 18:25:25
阅读次数:
126
/**
* 功能:给定一个输入文件,包含40亿个非负整数。产生一个不在该文件中的整数。内存限制:1GB
* 进阶:内存限制10MB。
*/
/**
* 思路:
*
* 1)创建包含40个亿个比特的位向量。
* 位向量(BV,bit vector)其实就是数组,利用整数(或另一种数据类型)数组紧凑地储存布尔值。每个整数可存储一串32比特或布尔值。...
分类:
其他好文 时间:
2015-08-15 13:37:29
阅读次数:
213
/**
* 功能:给定一个数组,包含1到N的整数,N最大为32000,数组可能含有重复的值,且N的取值不定。
* 若只有4KB内存可用,该如何打印数组中所有重复的元素。
*/
/**
* 思路:4KB最多殉职8*4*2^10个比特。比32000大。创建含有32000个比特的位向量,其中每个比特代表一个整数。
* 遇到重复元素,打印出来。
* @param array
...
分类:
编程语言 时间:
2015-08-15 13:36:29
阅读次数:
201
/**
* 功能:小鸡吃米。
* 小鸡一次可以吃n颗米(n>0),总共有m颗米(m>0),在不考虑小鸡最大能力的情况下,小鸡共有多少种吃法。(m与n之间无大小限定)
*/
/**
* 思路:自上而下的方式。
* 小鸡最后一次吃米,可能吃1颗米,2颗米,……,n颗米。因此,最后一次吃米的吃法,就是之前的总和。
* @param m
* @param n
...
分类:
其他好文 时间:
2015-08-14 19:21:21
阅读次数:
125
/**
* 功能:打印八皇后在8*8棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。
* 这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。
*/
static int GRID_SIZE=8;
/**
* 思路:每一行只能摆放一个皇后,因此不需要将棋盘存储为完整的8*8矩阵,只需一维数组,其中columns[r]=c表示有个皇后...
分类:
其他好文 时间:
2015-08-14 15:49:11
阅读次数:
112