一、概念:二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子...
分类:
Web程序 时间:
2014-08-04 21:31:58
阅读次数:
300
思路:类似归并排序算法,在合并已经有序的相邻子数组的时候,计算前面数组相对于后面数组的逆序对数,整个递归过程可以算出所有逆序对#include void merge(int A[], int front, int middle, int end, int &count){ if (front ...
分类:
其他好文 时间:
2014-08-04 21:26:48
阅读次数:
262
题目:已知有两个有序的单链表,其头指针分别为head1和head2,实现将这两个链表合并的函数:
Node* ListMerge(Node *head1,Node *head2)
这个算法很像我们排序算法中的归并排序,只能说“很像”,因为思想是一样的,但是这个与归并排序还是有区别的,区别如下:
1.归并排序是针对有序数组,而这里是有序链表;
2.归并排序排序的时间复杂度为o(nlogn),而这里的时间复杂度最坏情况下为O(m+n),最好的情况下为...
分类:
其他好文 时间:
2014-08-04 17:43:47
阅读次数:
296
链表排序:算法-归并排序public class LinkedSort { private static class ListNode { int val; ListNode next; ListNode(int x) { val...
分类:
其他好文 时间:
2014-08-04 17:09:37
阅读次数:
247
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4907
解题思路:就是把空余的时间单独用一个数组存起来,然后查找时用二分查找。但是这题却WA啦好多次,当时想死的心都有啦,后面才发现时数组开小了。。。
code:
#include
#include
#include
#include
#include
using namespa...
分类:
其他好文 时间:
2014-08-04 11:11:43
阅读次数:
215
代码:import java.util.ArrayList;import java.util.List;public class Bit { int max; int min; int[] arr; public Bit(int[] arrInput) { //...
分类:
其他好文 时间:
2014-08-03 17:37:45
阅读次数:
216
题目:给定一个排好序的整数数组,找到给定目标值的出现的首尾位置。
思路:二分查找。由于是有序数组,所以相同值的数是连续的,即只要找到其中一个,再向左右找到边界值就可以了,这三步均采用二分查找。...
分类:
其他好文 时间:
2014-08-03 12:48:35
阅读次数:
163
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2141题目大意:查找是否又满足条件的x值。这里简单介绍一个小算法,二分查找。 1 /* 2 3 x^2+6*x-7==y 4 输入y 求x 精确度为10^-5 5 0= 9 #includ...
分类:
其他好文 时间:
2014-08-03 12:40:35
阅读次数:
175
有一个正整数序列,求最短的子序列使得其和大于等于S,并输出最短的长度。用数组b[i]存放序列的前i项和,所以b[i]是递增的。遍历终点j,然后在区间[0, j)里二分查找满足b[j]-b[i]≥S的最大的i,时间复杂度为O(nlongn)。这里二分查找用到库函数lower_bound() 1 //#...
分类:
其他好文 时间:
2014-08-02 23:20:54
阅读次数:
269
问题:有序合并两个有序链表分析:归并排序的合并部分class Solution {public: ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) { ListNode *helper=new ListNode(0); ...
分类:
其他好文 时间:
2014-08-02 18:17:03
阅读次数:
170