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

软件项目管理工具seo顾问服务公司站长

软件项目管理工具,seo顾问服务公司站长,搜索引擎营销成功案例,数据查询网站如何做已知整数数组nums,先按升序排序后,再旋转。旋转k位后,元素分别为nums[k],nums[k1]...nums[0]...nums[k-1]。请查找target 是否存在,如果存在返回所在索引;否则返回-1。假定nums没有重复的元素。 假定排序后的数组为{1…

已知整数数组nums,先按升序排序后,再旋转。旋转k位后,元素分别为nums[k],nums[k+1]...nums[0]...nums[k-1]。请查找target 是否存在,如果存在返回所在索引;否则返回-1。假定nums没有重复的元素。

假定排序后的数组为{1,2,3,4,5}。

旋转0位:不变。

旋转1位:{2,3,4,5,1}

旋转2位:{3,4,5,1,2}

旋转3位:{4,5,1,2,3}

旋转4位:{5,1,2,3,4}

解题思路

观察后,可以得到如下结论:

旋转数组,可以拆分成左右两个升序数组,且左数组的任意元素都大于右数组的任意元素。

分两步:

  • 找到数组的分界线RBegin,[0,RBegin)是左数组,[RBegin,n)是右数组。特殊情况:只有一个升序数组,则RBegin为0,左数组为空。
  • 如果是小于等于nums.back(),在右边找;否则在左边找。升序寻找元素之前已经讲过了,就不累赘了。
            1. 寻找RBegin

nums[mid] < nums.back()

扔掉右边,不扔mid

nums[mid] == nums.back()

扔掉右边,不扔mid

nums[mid] > nums.back()

扔掉左边,扔掉mid

故用左开右闭空间。

代码

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int rBegin = FindRBegin(nums);
        if (target <= nums.back())
        {
            return Find(nums, rBegin, nums.size(), target);
        }
        return Find(nums, 0, rBegin, target);
    }
    int FindRBegin(const vector<int>& nums)
    {
        int left = -1, r = nums.size()-1;//左开右闭
        while (r - left > 1)
        {
            const int mid = left + (r - left) / 2;
            if (nums[mid] <= nums.back())
            {
                r = mid;
            }
            else
            {
                left = mid;
            }
        }
        return r;
    }
    int Find(const vector<int>& nums, int left, int r, int target)
    {
        while (r - left > 1)
        {
            const auto mid = left + (r - left) / 2;
            if (nums[mid] <= target)
            {
                left = mid;
            }
            else
            {
                r = mid;
            }
        }
        return (target == nums[left]) ? left : -1;
    }
};
int main()
{
    vector<int> vNums = {1,2,3,4,6};
    auto res = Solution().search(vNums, 4);
    std::cout << "index:" <<  res;
    if (-1 != res)
    {
        std::cout << " value:" << vNums[res];
    }
}

注意

开发及测试操作系统:Windows10(安装的时候没注意,安装成了英文版)
开发及测试环境:Microsoft Visual Studio 2022  
如果还不明白,请看我的视频;如果看完视频,还是不明白,请下载源码后,直接修改。
 

http://www.zhongyajixie.com/news/20819.html

相关文章:

  • 风雨同舟网站建设百度seo快速排名优化
  • 买个域名后怎么做网站重庆网站
  • 做网站买域名怎么弄产品线上推广方式都有哪些
  • 做网站域名后缀选择百度公司的企业文化
  • 徐州专业网站建设公司关键词排名优化公司外包
  • 怎样做心理咨询网站武汉seo论坛
  • 做网站做软件怎么赚钱站长统计 站长统计
  • 做地方门户网站赚钱吗佛山seo技术
  • .cn域名的大网站打开网址跳转到国外网站
  • av做爰免费网站佛山网站建设十年乐云seo
  • 如何网上赚点零花钱如何进行seo
  • wordpress 屏蔽广告seo案例模板
  • 四川住房建设部网站谷歌app官方下载
  • 如何做淘宝网网站域名seo做的比较好的公司
  • 火狐浏览器下载电商seo
  • 石家庄网站建设联系电话公关公司提供的服务有哪些
  • 丝芙兰网站做的好差seo按天计费系统
  • 产品review网站怎么做某网站搜索引擎优化
  • 网站开发行业新闻百度云盘登录入口
  • 营销型网站建设遨龙杭州网站建设
  • 做网站公司不负责任怎么办seo主管招聘
  • 下载 做网站的原型文件国内十大搜索引擎排名
  • 网站功能表seo自学网视频教程
  • 网站建设拾金手指下拉二十今天刚刚发生的新闻最新新闻
  • 建站需要会哪些语言真实有效的优化排名
  • 杭州网站建设工作室常德网站设计
  • wordpress仿内涵段子一个企业seo网站的优化流程
  • 恒华大厦做网站公司长尾词挖掘工具
  • 绍兴网站制作价格软件开发公司有哪些
  • 宝贝我想跟你做网站北京营销网站制作