加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_阳江站长网 (https://www.0662zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 模式 > 正文

「手撕算法」锁定大厂看这就可

发布时间:2020-09-17 20:29:16 所属栏目:模式 来源:我是程序员小贱
导读:基础数据结构的融合是成为庞大系统的基石。比如Redis中的跳跃表,数据库索引B+树等,只有对基础的数据结构足够的熟悉才能更容易去理解稍微复杂的结构,就仿佛我们闯关打怪一样,一步一步解锁直到结局。今天想和大家一起分享的是常见数据结构以及面试中的高

如果nums[mid]小于要查找的值,那么我们需要查找在[mid+1,right]之间,所以此时更新为left=mid+1 如果nums[mid]大于给定值value,这个时候需要查看nums[mid]是不是我们需要找的第一个值大于等于给定值元素,如果nums[mid]前面没有元素或者前面一个元素小于查找的值,那么nums[mid]就是我们需要查找的值。相反 如果nums[mid-1]也是大于等于查找的值,那么说明查找的元素在[left,mid-1]之间,所以我们需要将right更新为mid-1 int BinarySerach(vector& nums, int n,int target) {     int left = 0, right = n-1;     while (left <= right) {         int mid = left+((right-left)>>1);         if (nums[mid]>=value)         {             if(mid==0||nums[mid-1]<value)             {                 return mid;             }else             {                 right=mid-1;             }         }else         {             left=mid+1;         }     return -1; } 

5 查找最后一个小于等于给定值的情况

如果nums[mid]小于查找的值,那么需要查找的值肯定在[mid+1,right]之间,所以我们需要更新left=mid+1 如果nums[mid]大于等于给定的value,检查nums[mid]是不是我们的第一个值大于等于给定值的元素 int BinarySerach(vector& nums, int n,int target) {     int left = 0, right = n-1;     while (left <= right) {         int mid = left+((right-left)>>1);         if (nums[mid]>value)         {             right=mid-1;         }else         {             if(mid==n-1||(nums[mid+1]>value))             {                 return mid;             }else             {                 left=mid+1;             }         }     return -1; } 

4 队列

例子:滑动窗口最大值

队列回忆:

火车站买票应该都经历过,窗口小姐姐每次服务排在最前面的那个人,买完票则从头部离开,后面人往前一步接替离开的人继续购票,这就是典型的队列结构。

计算机中的队列和其类似,先到先得,先入先出,每个元素从尾部入队,从头部处理完出队

「手撕算法」锁定大厂看这就可

队列定义

单调队列

(编辑:应用网_阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读