LeetCode总结,二分法一般性总结

Posted EbowTang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode总结,二分法一般性总结相关的知识,希望对你有一定的参考价值。

一,学习别人的总结与讲解

本部分的参考见末尾,本部分文字是在其基础上的二度总结(节约时间和精力)。

1,典型的二分法

算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。 

基本思想:假设数据是按升序排序的,对于给定值key,从序列的中间位置k开始比较,

如果当前位置arr[k]值等于key,则查找成功;

若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1]

若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high]

直到找到为止,时间复杂度:O(log(n))。


上面的思想就是最最简单的二分法,即从一个排好序的数组之查找一个key值。 如下面的程序:

  1. int search(int *arr, int n, int key)
  2. {
  3.     int left = 0, right = n-1;
  4.     while(left<=right) {//慎重截止条件,根据指针移动条件来看,这里需要将数组判断到空为止
  5.         int mid = left + ((right - left) >> 1);//防止溢出
  6.         if (arr[mid] == key)//找到了
  7.             return mid; 
  8.         else if(arr[mid] > key) 
  9.             right = mid - 1;//给定值key一定在左边,并且不包括当前这个中间值
  10.         else 
  11.             left = mid + 1;//给定值key一定在右边,并且不包括当前这个中间值
  12.     }
  13.     return -1;
  14. }

以上是关于LeetCode总结,二分法一般性总结的主要内容,如果未能解决你的问题,请参考以下文章

二分查找法类算法题总结

leetcode刷题——一些算法技巧总结1.0

leetcode 378 有序矩阵中第k小的元素(二分 or 归并)

二分查找总结

二分法学习总结(5.22)

二分三分总结