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

Search in Rotated Sorted Array II

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Follow up forSearch in Rotated Sorted Array :What if duplicates are allowed?

Would this affect the run-time complexity?How and Why?

Write a function to determine if a given target is in the array.

允许数组旋转,并且还允许数组重复,这种情况下,还是可以使用二分法来查找目标元素。

如果允许数组中元素重复,在数组旋转之后,a[m]>=a[1]的情况下,1~m之间的数组就不一定是单调递增的。比如{1,3,1,1,1}. 其实只有等于号的情况下,递增性是不确定的。那就需要将=和>分开考虑。

  • a[m]>a[1],则在[1,m]之间,数组一定是递增的,就算有重复元素,这一段也还是递增的。
  • a[m]=a[1],在[1,m]之间,数组就不一定是递增的了。那就需要查看下一个元素。

解决方案:

class Solution
{
public:
    int search(const vector<int>& num,int target)
    {
        int first = 0;
        int last = num.size();
        while(first != last)
        {
           const int mid = first + (last - first)/2;
           if(num[mid] == target)
               return  mid;
           if(num[first] < num[mid])
           {
               if(num[first] <= target && num[mid] > target)
                   last = mid;
               else
                   first = mid + 1;
           }
            else if(num[first] > num[mid])
           {
               if(num[mid]< target && num[last] > target)
                   first = mid + 1;
               else
                   last = mid;
           }
           else
           {
               first+=1;
           }
        }
        return -1;
    }
};

测试代码:

#include<iostream>
#include<vector>

using namespace std;


class Solution
{
public:
    int search(const vector<int>& num,int target)
    {
        int first = 0;
        int last = num.size();
        while(first != last)
        {
           const int mid = first + (last - first)/2;
           if(num[mid] == target)
               return  mid;
           if(num[first] < num[mid])
           {
               if(num[first] <= target && num[mid] > target)
                   last = mid;
               else
                   first = mid + 1;
           }
            else if(num[first] > num[mid])
           {
               if(num[mid]< target && num[last] > target)
                   first = mid + 1;
               else
                   last = mid;
           }
           else
           {
               first+=1;
           }
        }
        return -1;
    }
};

int main(void)
{

    vector<int> a;
    int target = 1;

    a.push_back(4);
    a.push_back(5);
    a.push_back(5);
    a.push_back(6);
    a.push_back(6);
    a.push_back(7);
    a.push_back(7);
    a.push_back(1);
    a.push_back(2);
    a.push_back(3);
    a.push_back(4);

    Solution s;
    int result = s.search(a,target);
    cout <<"The"<<" "<<target<<" "<<"is located in "<<result<<endl;
    return 0;
}

转载于:https://my.oschina.net/u/1771419/blog/2049988

相关文章:

  • IT题库7-线程加锁
  • sysbench使用
  • CSS.2
  • 程序架构探讨—002 应用服务器集群的伸缩性之负载均衡
  • Web安全系列(二):XSS 攻击进阶(初探 XSS Payload)
  • 3点建议:如何在面试中回答“你最大的成就”
  • 简单的node爬虫练手,循环中的异步转同步
  • 活跃银行×××之二:创新的恶意软件Osiris
  • “数据中心运维管理VIP学习群”问题汇总(一)
  • Oracle 数据文件及其管理
  • Oh!MongoDB日志从文本穿越成了图片?咋整!
  • AtCoder Grant Contest 10.F 博弈
  • Centos7安装Openresty和orange
  • 在ubuntu18实践
  • 非常全面的vim配置文件
  • 【React系列】如何构建React应用程序
  • 08.Android之View事件问题
  • Asm.js的简单介绍
  • Brief introduction of how to 'Call, Apply and Bind'
  • C++11: atomic 头文件
  • CSS实用技巧干货
  • Docker容器管理
  • DOM的那些事
  • flask接收请求并推入栈
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • js递归,无限分级树形折叠菜单
  • MobX
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • React as a UI Runtime(五、列表)
  • Shadow DOM 内部构造及如何构建独立组件
  • 规范化安全开发 KOA 手脚架
  • 回顾2016
  • 利用jquery编写加法运算验证码
  • 一些关于Rust在2019年的思考
  • 智能网联汽车信息安全
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 我们雇佣了一只大猴子...
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​如何在iOS手机上查看应用日志
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (+4)2.2UML建模图
  • (ros//EnvironmentVariables)ros环境变量
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (理论篇)httpmoudle和httphandler一览
  • (一)kafka实战——kafka源码编译启动
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)重识new
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .jks文件(JAVA KeyStore)
  • .NET Core 成都线下面基会拉开序幕
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET NPOI导出Excel详解