BinarySearch

转载请注明:http://blog.youkuaiyun.com/zhouyelihua/article/details/46665931

二分查找的应用

二分查找作为 O(log(n)) 时间复杂度的查找算法得到了广泛的使用。

1.在已排序的数组中查找特定的元素。或者是满足条件的第一个元素 
2.数学常用的求解方程的解,也是数学家所指的对半查找。 
3.程序调试中用来定位错误语句 
4….

二分查找的原始代码

<code class="language-c++ hljs vbscript has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">   <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> binarySearch(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> A[],<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>,<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>,<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> target)
   {
        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>;
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span>(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span><=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>)
        {
         <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>=(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>+<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>)/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>;
         <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(A[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>]<target)
             <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>+<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;
         <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(A[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>]==target)
             return <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>;
         <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>
             <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;
        }
        return -<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;
   }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li></ul>

注意事项 一:mid溢出

针对上文代码中

<code class="language-c++ hljs vbscript has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>=(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>+<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>)/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

这一句代码有两个注意事项:

1.计算机方式有乘以 2n 或者是除以 2n 都可以利用移位代替。所以上述代码可以改为:

<code class="language-c++ hljs vbscript has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>=(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>+<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>)>><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

2.第二个需要注意的是该段代码有可能产生溢出。当数组的中元素个数很多时候,至少大于 INT_MAX2 ,当left和right都是接近INT_MAX.二者相加就可能得到一个负数。这种办法有两个。

2.1将mid定义成

<code class="language-c++ hljs vbnet has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">long</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">long</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">mid</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

2.2

<code class="language-c++ hljs vbscript has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>+(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>-<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>)>><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

注意事项 二:常数步的前进

这个错误在编程珠玑中也有提到的,但是自己还是经常放错误。 
还是原来的那段代码很多人容易写成

<code class="language-c++ hljs vbscript has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">   <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> binarySearch(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> A[],<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>,<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>,<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> target)
   {
        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>;
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span>(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span><=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>)
        {
         <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>=(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>+<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>)/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>;
         <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(A[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>]<target)
             <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>;
         <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(A[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>]==target)
             return <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>;
         <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>
             <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>;
        }
        return -<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;
   }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li></ul>

很多人在这时候可以很清楚的意识到上述中

<code class="language-c++ hljs vbscript has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">
            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>+<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>     ==》   <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>;

            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>    ==》   <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>;
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

此处得特别注意是这样很容易掉入陷阱当中 
比如当

target=A[1]
left=0,right=1
这个时候
mid=0
然后
left=mid=0
回到循环开始前。就陷入了死循环。 
所以在写二分查找时候一定记住要 有常数步的前进

LeetCode实例

这里在leetcode上找了一个应用来说明问题 
链接地址https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/ 
题目: 
Follow up for “Find Minimum in Rotated Sorted Array”: 
What if duplicates are allowed?

Would this affect the run-time complexity? How and why? 
Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

The array may contain duplicates.

<code class="language-c++ hljs vbscript has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> Solution {
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>:
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> findMin(vector<<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span>>& nums) {
               <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(nums.<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">empty</span>())
            return <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;
        <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>,<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>=nums.size()-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>;
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span>(nums[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>]>=nums[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>])
        {
            <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>=(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>+<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>)>><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(nums[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>]>nums[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>])
                <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>+<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(nums[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>]>nums[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>])
                <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>;
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(nums[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>]==nums[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>]&&nums[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>]==nums[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>])
            {
                <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> tmp=nums[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>];
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span>(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> i=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>;i<<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>;i++)
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(tmp>nums[i])
                  tmp=nums[i];
                return tmp;
            }
        }
        return nums[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>];
    }
};</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li></ul>

本人在写上述代码时候就是放了第二个错误。

<code class="language-c++ hljs vbscript has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">
                <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>+<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;

                <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>;
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>

只要有一个常数步就可以在邻近的两个元素避免死循环。 
第二道二分查找题目https://leetcode.com/problems/sqrtx/ 
Sqrt(x) Total Accepted: 55059 Total Submissions: 238405 My Submissions Question Solution  
Implement int sqrt(int x).

Compute and return the square root of x

<code class="language-c++ hljs vbscript has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> Solution {
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span>:
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> mySqrt(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> x) {
       <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;
       <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">int</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>=x;
       long long  <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>;
       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span>(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span><=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>)
       {    
          <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>=(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>+<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>)/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>;
          <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>*<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span><x)
             <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>+<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>; 
          <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>*<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>>x)
           <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">right</span>=<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;
           <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>
            return <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">mid</span>;
       }
       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>*<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>>x)
       return <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;
       return <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">left</span>;
    }
};</code>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值