把一个有序数组进行旋转,对于已知旋转后的数组,找出这个数组中的最小值。这个问题看起来比较简单,只要遍历一遍数组就能找到最小值,但如果题目中对时间复杂度有要求,那么这个时候就要考虑用其他的方法。可以想到一种方法,二分查找法,每一次二分查找一定会有一边的数字是..
分类:
编程语言 时间:
2016-05-23 01:16:12
阅读次数:
184
关于二分查找法在学习算法的过程中,我们除了要了解某个算法的基本原理、实现方式,更重要的一个环节是分析算法的复杂度。在时间复杂度和空间复杂度之间,我们又会更注重时间复杂度,往往用牺牲空间换时间的方法提高时间效率。时间复杂度按优劣排差不多集中在:O(1),O(logn),O(..
分类:
编程语言 时间:
2016-05-22 00:58:22
阅读次数:
557
Collections类主要是完成了两个主要功能
1.提供了若干简单而又有用的算法,比如排序,二分查找,求最大最小值等等。
2.提供对集合进行包装的静态方法。比如把指定的集合包装成线程安全的集合、包装成不可修改的集合、包装成类型安全的集合等。
package Java.util;
import java.io.Serializable;
import java.io.Ob...
分类:
其他好文 时间:
2016-05-20 11:54:01
阅读次数:
191
查找里面顺比表查找和有序表查找(包括二分查找,插值查找,斐波那契查找)比较简单,直接贴代码,代码里面有详细注释。 运行结果: ...
分类:
其他好文 时间:
2016-05-19 00:00:14
阅读次数:
463
二分查找算法 1.旋转数字中的最小数字:(3,4,5,1,2 为 1,2,3,4,5 的一个旋转) 正如上图所示:我们计算中间的位置 middle 如果说 arr[middle] >= arr[start] 说明 middle 落在了前面的递增区间上,middle = start 缩小查找范围. 同 ...
分类:
编程语言 时间:
2016-05-17 17:47:05
阅读次数:
291
二分查找法: 二分查找法主要是解决在“一堆数中找出指定的数”这类问题。 而想要应用二分查找法,这“一堆数”必须有一下特征: 存储在数组中 有序排列 所以如果是用链表存储的,就无法在其上应用二分查找法了。(曽在面试被问二分查找法可以什么数据结构上使用:数组?链表?) 至于是顺序递增排列还是递减排列,数 ...
分类:
编程语言 时间:
2016-05-17 13:19:12
阅读次数:
136
前提数组必须是有序的 定义最小,最大,中间的角标索引 上面的索引需要变化,使用循环,条件:当中间值不等于目标值时 当中间值大于目标值时,最大角标移动到中间角标-1位置 当中间值小于目标值时,最小角标移动到中间角标+1位置 中间角标继续二分 此时的代码有问题,当找不到目标时,会陷入死循环,加一个判断 ...
分类:
编程语言 时间:
2016-05-17 11:19:16
阅读次数:
192
#include<iostream>
usingnamespacestd;
#include<assert.h>
//方法1:区间为[]
/*
intBinarySearch(int*a,intsize,intx)
{
assert(a);
intleft=0;
intright=size-1;
while(left<=right)
{
intmid=left+(right-left)/2;
if(a[mid]<x)
{
left..
分类:
编程语言 时间:
2016-05-17 00:58:06
阅读次数:
139
#include<iostream> #include<stdio.h> using namespace std; const int MAXN=1024; int bin_search(int a[], int len, int goal){//二分查找 int low,high,mid; low ...
分类:
编程语言 时间:
2016-05-16 17:22:08
阅读次数:
211
Binary Search基本的复杂度为O(logn)。如果提示需要对O(n)的算法进行优化,非常可能就是二分,另外二分一般出现在排序数组或者变形后的排序数组(rotated array)当中。二分主要有两种,binary search on index(index上的二分)和binary sear ...
分类:
其他好文 时间:
2016-05-16 00:09:43
阅读次数:
166