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值。 如下面的程序:
- int search(int *arr, int n, int key)
- {
- int left = 0, right = n-1;
- while(left<=right) {//慎重截止条件,根据指针移动条件来看,这里需要将数组判断到空为止
- int mid = left + ((right - left) >> 1);//防止溢出
- if (arr[mid] == key)//找到了
- return mid;
- else if(arr[mid] > key)
- right = mid - 1;//给定值key一定在左边,并且不包括当前这个中间值
- else
- left = mid + 1;//给定值key一定在右边,并且不包括当前这个中间值
- }
- return -1;
- }
以上是关于LeetCode总结,二分法一般性总结的主要内容,如果未能解决你的问题,请参考以下文章