找出数组中重复的数字(C++注释)

在这里插入图片描述

哈希表

class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
    /*
    解题思路:
    用哈希表。遍历数组nums,nums中元素作为key值,出现次数作为value值,value值大于1时直接输出key值。
    */
        unordered_map<int, int> mp; //构建哈希表
        int len = nums.size();      //数组长度为len

        for (int i = 0; i < len; i++)   //遍历数组nums
        {
            mp[nums[i]]++;          //将nums数组中元素作为哈希表中Key值填入mp中
            if (mp[nums[i]] > 1)
                return nums[i];     //如果Key值对应的Value值大于1,则说明该元素重复出现,返回该元素
        }
        return -1;      //如果遍历一遍数组仍没有值返回,说明数组中每个元素均不重复,返回-1
    }
};

交换下标

    int findRepeatNumber(vector<int>& nums) {
    /*
    解题思路:
    nums数组长度为n,且里面所有数字都在0~n-1范围内,因此我们只需要将遍历数组,然后将每一个数组元素与其值所对应数组下标元素互换。当发现当前元素与当前元素值对应的下标元素的值相同时,说明该元素重复,则返回该元素。
    */
        int len = nums.size();  //数组长度为len

        for (int i = 0; i < len; i++)
        {
            if (i != nums[i])   //如果当前元素值不等于其下标(如果相等则i自增)
            {
                if (nums[i] == nums[nums[i]])   //如果当前元素与其值所对应下表中元素值相等,则输出该元素
                    return nums[i];
                swap(nums[i], nums[nums[i]]);   //如果不相等,则交换当前元素与其值所对应下标中元素
            }
        }
        return nums[len - 1];   //如果遍历一遍均未输出,则一定是以下情况:即前1~n-1个元素与下标对应,第n个元素为重复元素
    }
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图书信息管理系统 1. 设计目的: 为了锻炼计算机专业学生的编程能力,特别组织了这次软件实习,编程是一种抽象思维 ,必须要通过动手才能培养其能力,我们软件实习的主要目的是要求学生对所学的语言 熟练的掌握,并可以精通一门自己喜欢的编程语言,并且能把现实的问题抽象成程序, 用程序语言表现出来。 1.能根据实际问题的具体情况,结合面向对象的基本理论和基本技巧,正确分析问 题,并能设计出解决问题的有效算法与程序。 2.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法和程序的正 确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高 程序设计水平。 2. 设计要求: 图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试 设计一图书信息管理系统,使之能提供以下功能: 系统以菜单方式工作ϖ 图书信息录入功能(图书信息用文件保存)--输入ϖ 图书信息浏览功能--输出ϖ 查询和排序功能:(至少一种查询方式)--算法ϖ 按书名查询 按作者名查询 图书信息的删除与修改(可选项) 3. 流程图: 四、模块分析: (1)main()函数模块 主函数定义了一个database类的对象book2,通过这个对象调用bookdata(),主函数代码很 少,只是一个菜单首页。 int main() { database book2; cout<<endl<<endl<<"\t\t\t图 书 信 息 管 理 系 统"; cout<<endl<<endl; book2.bookdata(); return 0;} (2)添加图书信息模块 void addbook(int n,char *bn,char *an,char *ty,char *pub,char *ti,char *pr) //增加图书 { num=n; strcpy(bname,bn); //把输入的内容复制给bname strcpy(aname,an); strcpy(type,ty); strcpy(publish,pub); strcpy(time,ti); strcpy(price,pr);} 用户通过键盘输入图书基本信息(图书编号,书名,作者名,图书类型,出版日期, 出版单位,图书价格) (3)显示图书文件中所有图书信息 void show() {cout<<setw(10)<<num<<setw(9)<<bname<<setw(9)<<aname<<setw(8)<<type<<setw(6) <<publish<<setw(20)<<time<<setw(9)<<price<<setw(5)<<endl; } void show() { for (int i=0;i<=top;i++) book1[i].show(); } (4)查询图书信息模块 book *find(int id) //查找图书 {for (int i=0;i<=top;i++) if (book1[i].getnum()==id) { return &book1[i];} } 五、程序的源代码(含注释): #include"iostream" #include "iomanip" #include "string" #include "fstream" /*输入/输出文件流类*/ using namespace std; const int max=5; /*数组5,图书添加五本*/ class book { private: int num; //图书编号 char bname[20]; //书名 char aname[20]; //作者名 char type[20]; //图书类型 char publish[20]; //出版单位 char time[20]; //出版时间 char price[20];//价格 public: void query(int m){}; int getnum() { return num;} char getbname() { return bname[20];} char getaname() { return aname[20];} char gettype() { return type[20];} char getpublish() { return publish[20]; } char gettime() { return time[20];} char getprice() {return price[20];} void addbook(int n,char *bn,char *an,char *ty,char *pub,char *ti,char *pr) //增加图书 { num=n; strcpy(bna

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值