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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)