当前位置: 首页 > news >正文

成品电影网站建设/成免费crm软件有哪些优点

成品电影网站建设,成免费crm软件有哪些优点,做游戏网站思想步骤,网站规划与建设与安全管理建议使用左闭右开区间[l, r)查找。二分查找的最后,索引l,r会落到右区间第一个元素位置。因此但凡是能够见数组分成左右两个区间的都能应用二分查找法。 1、普通查值 常见问题方式:寻找含重复值的有序数组 [...,a, tar, tar, tar,.b....]&am…

建议使用左闭右开区间[l, r)查找。二分查找的最后,索引l,r会落到右区间第一个元素位置。因此但凡是能够见数组分成左右两个区间的都能应用二分查找法。

1、普通查值

常见问题方式:寻找含重复值的有序数组 `[...,a, tar, tar, tar,.b....]`,找到tar元素的上下边界位置。

(1)寻找下边界:

俗称lower_bound,将[...a]看做左区间,[tar,tar,tar,b...]看做右区间,因此左区间向右移动的条件是nums[mid] < tar,否则右区间向左移动;(如果找不到,右区间第一个大于tar的元素)。

int lower_bound(int[] nums, int n, int tar)
{int left = 0, right = n;while(left < right){int mid = left + (right-left)/2;if(nums[mid]<tar) left = mid+1;else right = mid;}return left;//查找结束后,不管找没找到目标值,right==left,返回哪个都行。
}

(2)寻找上边界

俗称upper_bound,将[...a,tar,tar,tar]看做左区间,[b...]看做右区间,upper bound是l-1。因此左区间向右移动的条件是nums[mid] <= tar,否则右区间向左移动;(如果找不到,右区间第一个大于tar的元素)。

2、旋转数组查找

含义:对于[1 2 3 4 5]向右旋转两次为[4 5 1 2 3]称为旋转数组。

(1)无重复元素时 查找指定元素位置

33. 搜索旋转排序数组

思路:对于[1 2 3 4 5],[4 5 1 2 3]两种旋转数组类型,可以根据target与nums[0]大小关系分成左右两区间。当target在左区间(tar>-nums[0])时,nums[mid]在右区间或在左区间但大于target都要向左移动,只有nums[mid]在左区间且小于taget向右移动。当taget在右区间同理分析。

平均时间复杂度O(logn),最坏时间复杂度O(n)

    int search(vector<int>& nums, int target) {if (nums.empty()) return -1;if (target == nums[0]) return 0;int n = nums.size(), l = 0, r = n;while (l < r) {int mid = (l+r)/2;if (nums[mid] == target) {return mid;}if (target >= nums[0]) {//target在左区间//当前值在左区间且当前值小于目标值往右走if (nums[mid] >= nums[0] && nums[mid] < target)l = mid +1;else//其他情况都往左走 r = mid;}else {//当前值在右区间且当前值大于目标值往左走if (nums[mid] <= nums[0] && nums[mid] > target) r = mid;elsel = mid +1;}}return -1;}

(2)含重复元素时 查找元素位置

81. 搜索旋转排序数组2

旋转数组含有重复元素,且重复元素在数组首尾时,就无法根据taget与nums[0]关系分成左右区间了,我们可以左右收缩派出重复元素,再根据上一题思路进行查找。

    bool search(vector<int>& nums, int target) {int n = nums.size(), l=0, r=n-1;if (target == nums[0]) return true;//因为要跳过首尾重复元素,先判断下while (l+1 <n && nums[l] == nums[l+1]) ++l;while (r-1>=0 && nums[r] == nums[r-1]) r--;if (l >= r) return false;//全部重复if (nums[l] == nums[r]) --r;//上面收缩后仍有可能左右边界元素相同++r;//右边界取不到int begin = nums[l];while (l < r) {int mid = (l+r)/2;if (target == nums[mid]) {return true;}if (target >= begin) {if (nums[mid] >= begin && nums[mid] < target) l = mid+1;else r = mid;}else {if (nums[mid] < begin && nums[mid] > target) r = mid;else l = mid+1;}}return false;}

(3)无重复值 寻找最小值

153. 寻找旋转排序数组中的最小值

二分法是数组按某种规律分成两个区间就可以用,最终索引落到右区间第一个元素。

该题两种情况:3 4 5 1 2       [3 4 5]向右 [1 2]向左

                1 2 3 4 5       [1 2 3 4 5]向左

所以规律是nums[mid] < nums.back向左,但是和nums[0]比较不是很符合

    int findMin(vector<int>& nums) {int n = nums.size(), l = 0, r = n;while (l < r) {int mid = (l+r)/2;if (nums[mid] > nums.back()) l = mid+1;else r = mid;}return nums[l];}

(4)有重复值 寻找最小值

154. 寻找旋转排序数组中的最小值 II

同理向去处左右重复值.平均时间复杂度O(logn),最坏时间复杂度O(n)

    int findMin(vector<int>& nums) {int n = nums.size(), l =0, r = n-1;while (l<n-1 && nums[l] == nums[l+1]) ++l;while (r >=1 && nums[r] == nums[r-1])--r;if (l >= r) return nums[0];if (nums[l] == nums[r]) --r;++r;int end = r;while (l < r) {int mid = (l+r)/2;if (nums[mid] > nums[end-1]) l = mid+1;else r = mid;}return nums[l];}

(5)寻找峰值元素

对于单峰值数组。有三种情况,峰值在中间,递增数组、递减数组。根据趋势将数组分为左右区间

    int findPeakElement(vector<int>& nums) {int n = nums.size(), l = 0, r=n;while (l < r) {int mid = (l+r)/2;//把n-1放到右区间,如果数组一直递增,那么l最终落到n-1上符合题目if (mid+1<n && nums[mid] < nums[mid+1]) l = mid + 1;else r = mid;}return l;}

http://www.jmfq.cn/news/4899151.html

相关文章:

  • 内丘网站/四种基本营销模式
  • 贵金属交易app下载/东莞市网络seo推广价格
  • 苏州建行网站首页/百度公司在哪里
  • 购物网站国外/seo公司上海
  • 无锡网站排名公司/百度推广入口官网
  • 东莞网站SEO优化托管/免费涨粉工具
  • 网站价格表/sem竞价教程
  • ppt图标网站链接怎么做/兰州网站seo服务
  • ck播放器做解析网站/天眼查询个人
  • wordpress文章变缩略图/网站seo怎么操作
  • 做的好看的统一登录网站/公司网站如何在百度上能搜索到
  • 平台网站建设 厦门/seo网络培训班
  • wordpress付费开通站点/aso排名
  • 建立网站项目计划书模板/网站seo应用
  • 郴州网站建设费用价格/seo批量建站
  • 花都网站设计都/新闻头条最新消息今天
  • 在哪里买空间做网站/舆情分析报告案例
  • 小型企业网站建设毕业论文/网站快速排名互点软件
  • 罗田县住房和城乡建设局网站/最佳的搜索引擎
  • 上市公司中 哪家网站做的好/百度 营销推广是做什么的
  • 机关网站及新媒体建设实施方案/需要优化的地方
  • 网站开发设计师培训/市场营销方案怎么做
  • 安徽省经工建设集团公司网站/网络营销工具介绍
  • 网站建设技术方面论文/seo也成搜索引擎优化
  • 大气网站源码/seo资料
  • 厦门网站建设设计/网站策划书怎么写
  • wordpress 前台发文章/seo资讯
  • 淘客做的领券网站/网络营销有哪些例子
  • 加快公司网站建设/百度网址怎么输入?
  • 品牌营销型网站作用/网络营销推广渠道