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

面试题3:数组中重复的数字,不能修改原数组

  •  
  • #include <iostream>
    #include <vector>
    /*
        面试题3:数组中重复的数字:
        问题:   在len长、值域为【1,len-1】的数组中找到重复的那个数字,不能修改原数组
        解决:   哈希表,时间空间复杂度都是o(n)
                 二分查找,不断的查找重复的数字是在值域的前半区间内,还是在后半区间内
                 时间复杂度为o(nlgn), 空间复杂度为o(1)
    
    */
    using namespace std;
    
    // 返回[low, up]范围内是否有重复数字
    bool check_repeat(const vector<int> array_n, const int len, const int up,const int low)
    {
        int number = 0;
        for(int i = 0; i < len; i++)
        {
            if (array_n[i]>=low && array_n[i]<=up)
                number++;
        }
    
        if (up-low+1 < number) return true;
        else return false;
    }
    
    //在len长、值域为【1,len-1】的数组中找到重复的那个数字
    int getduplication(const vector<int> array_n, const int len)
    {
        if (array_n.size() == 0)
            return -1;
        for (int i = 0; i < len; i++)
            if (array_n[i] > len-1 || array_n[i] < 1) return -2;
        int up = len-1;
        int low = 0;
        while(true)
        {
            if (up == low)
                break;
            if (check_repeat(array_n, len, up, low/2+up/2))
                low = low/2+up/2;
            else
                up = low/2+up/2-1;
        }
        return up;
    }
    int main(void)
    {
    
        int len;
        cin >> len;
        vector<int> array_n(len, 0);
        for (int i = 0; i < len; i++)
            cin >> array_n[i];
    
        int duplication = getduplication(array_n, len);
        if (duplication == -1)
            cout << "输入的数组为空";
        else if (duplication == -2)
            cout << "输入的数组的值域不在【" << 1 << "," << len-1 << "】之间";
        else
            cout << duplication;
    
        return 0;
    }

     

转载于:https://www.cnblogs.com/jkn1234/p/8878176.html

相关文章:

  • 蓝牙 bluez 的编程 C C++
  • Golang自定义包总结
  • Js基础——数据类型之Null和Undefined
  • 如何调用带返回值类型的函数
  • 通过pfSense阻止对某个网站的访问
  • scala基础语法(二)
  • python subprocess
  • linux笔记4.0
  • Oracle毙掉JavaOne
  • node入门
  • HTML5+CSS3+jQuery Mobile轻松构造APP与移动网站 (陈婉凌) 中文pdf扫描版
  • 拓展jquery js动态添加html代码 初始化数据
  • 几种编码格式
  • “Head First 设计模式“ :适配器模式
  • 一个披萨电影夜,你到底泄露了多少个人数据?
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • Flannel解读
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java编程基础24——递归练习
  • js算法-归并排序(merge_sort)
  • npx命令介绍
  • PHP那些事儿
  • springMvc学习笔记(2)
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Windows Containers 大冒险: 容器网络
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 程序员该如何有效的找工作?
  • 程序员最讨厌的9句话,你可有补充?
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 今年的LC3大会没了?
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 漂亮刷新控件-iOS
  • 设计模式 开闭原则
  • 什么是Javascript函数节流?
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 正则学习笔记
  • 字符串匹配基础上
  • HanLP分词命名实体提取详解
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (27)4.8 习题课
  • (二)linux使用docker容器运行mysql
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)JPA - JQPL 实现增删改查
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • (状压dp)uva 10817 Headmaster's Headache
  • *** 2003