时间优化篇
今天刷题的过程中遇到一道需要优化算法、缩短运行时间的题。解决此题就需要用到二分搜索,先说一下什么是二分搜索,二分搜索可以将O(n)的时间缩短到O(logn)。
具体实现方式:
比如从一个口袋中拿出四张卡片,其和为m时即算获胜,问是否存在抽取四次和为M的组合存在,暴力方法是直接四层循环整个过一遍,其需要的时间是O(n4),当数组很大上百上千时,则会导致浪费大量的时间,此时将思路改为查找的值为m-ka-kb-kc为x。预先把数组k排好序,然后看k中央的数字,可知
~如果它比x小,x只可能在它的后面半段;
~如果它比x大,x只可能在它的前面半段;
原理:
二分搜索算法每次将候选区间减小至原来的一半。因此,要判断长为n的有序数组k中是否包含x,只要反复执行log2 n 次就完成了。其复杂度是O(logn)时间。