C#实现二分查找算法

简述:

  二分算法是一道很经典的算法题,面试题,今天威某人,就斗胆带着各位过一遍吧!!!

题目:

可能大部分人,尤其是像我这种没怎么刷过算法的小伙伴,第一反应肯定是这题太侮辱人了,我直接秒了,于是乎就会写下下面这段代码

1   for(int i=0;i<nums.Length;i++)
2         {
3             if(nums[i]==target)
4             return i;
5         }
6         return -1;

 虽然答案正确,但是它的时间复杂度是O(n),换言之就是:假设我让你猜一个数字让你用最快的方法猜到,每猜一次我会告诉你猜大了还是猜小了,而这段代码的操作是1,2,3,4摆烂猜法,如果我这个数字是1000再或者是10000,所以显然这个答案并不是一个理想的答案,可能面试官看到这段代码的时候就会立刻请我们离开。

思路:

见名思意,其实这题很简单,我只要每次去猜中间那个数,然后再去判断是否猜大了还是小了,从而判断我想要的这个数在左边还是在右边,然后再去猜一半,如果刚好相等直接找到返回出来

由于每次查找都会将查找范围缩小一半,因此二分查找的时间复杂度是 O(log n),其中 n 是数组的长度。

于是乎就有了下面这段代码

 1 int result=-1;
 2 int left = 0;
 3 int right = nums.Length - 1;
 4 while (left <= right)
 5 {
 6     int mid = (left + right) / 2;
 7     if (nums[mid] == target)
 8     {
 9         result = mid;
10         break;
11     }
12     else if (nums[mid] < target)
13     {
14         left = mid + 1;
15     }
16     else
17     {
18         right = mid - 1;
19     }
20 }
21 return result;

小互动:

今天这道题就结束了,希望可以帮到屏幕前的你,也可以试试拿这个方法去买彩票试试,当然了你并不清楚那一沓彩票里面有没有那么多的奖金,纯属开玩笑哈哈

posted @ 2024-11-12 10:18  echo_sw  阅读(14)  评论(0编辑  收藏  举报