「手撕算法」锁定大厂看这就可
如果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 队列 例子:滑动窗口最大值 队列回忆: 火车站买票应该都经历过,窗口小姐姐每次服务排在最前面的那个人,买完票则从头部离开,后面人往前一步接替离开的人继续购票,这就是典型的队列结构。 计算机中的队列和其类似,先到先得,先入先出,每个元素从尾部入队,从头部处理完出队 队列定义 单调队列 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |