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;
小互动:
今天这道题就结束了,希望可以帮到屏幕前的你,也可以试试拿这个方法去买彩票试试,当然了你并不清楚那一沓彩票里面有没有那么多的奖金,纯属开玩笑哈哈
本文来自博客园,作者:echo_sw,转载请注明原文链接:https://www.cnblogs.com/shenweif/p/18541246