存在重复元素算法(leetcode第217题)

news/2025/2/14 8:01:07/

题目描述:

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

示例 1:

输入:nums = [1,2,3,1]
输出:true

示例 2:

输入:nums = [1,2,3,4]
输出:false

示例 3:

输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true

提示:

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109

算法一:排序法

思路:

将所有元素进行排序,对相邻元素比较是否相同,找出重复元素

代码实现:
# include<stdlib.h>int cmp(const void* _a, const void* _b) {int a = *(int*)_a, b = *(int*)_b;return a - b;
}bool containsDuplicate(int* nums, int numsSize) {//排序qsort(nums, numsSize, sizeof(int), cmp);//相同的数会相邻 所以检查相邻元素是否相同即可for (int i = 0; i < numsSize - 1; i++) {if (nums[i] == nums[i + 1]) {return true;}}return false;
}

算法二:hash表

思路:

创建hash表,利用取余来降低数据大小,具体实现见注释

代码实现:
bool containsDuplicate(int* nums, int numsSize){if(numsSize<2)//边界情况判断return false;int Hasharr[numsSize];int count = 0;int reminder = 0;//初始化for(int i=0;i<numsSize;i++){Hasharr[i] = 0;}for(int i=0;i<numsSize;i++){//单独对0讨论-->防止与可被整除的数混淆if(nums[i] == 0){count++;if(count == 2)return true;continue;}// 4 100 1000 -50 1000reminder = nums[i]%numsSize;if(reminder<0)reminder+=numsSize;while(true){if(Hasharr[reminder]==0){//未存放-->存入新数据-->下一轮Hasharr[reminder] = nums[i];break;}//比对数据else if(Hasharr[reminder] == nums[i]){return true;}//不同-->移位-->重复判断是否一存放else{reminder++;if(reminder>=numsSize)reminder-=numsSize;}}}return false;
}


http://www.ppmy.cn/news/1259705.html

相关文章

HTB_Archetype攻击全流程

Archetype (SMB、SQL Server xp_cmdshell、反弹shell、winPEASx64、psexec远程连接) TASK 1 问题: 哪个TCP端口托管着数据库服务器&#xff1f;目的: 识别运行数据库服务的端口&#xff0c;通常通过端口扫描&#xff08;如使用nmap&#xff09;来完成。 TASK 2 问题: 通过S…

高防CDN可以更好的防御网站被攻击

高防CDN是在原服务器的基础上配置了DDoS高防、 CC防护、CDN加速来确保线上业务安全快速地运行。使用高防CDN后网站服务器会被隐藏在后端&#xff0c;使攻击者无法攻击到网站服务器&#xff0c;只能攻击部署在前端的CDN节点&#xff0c;每当检测到是攻击流量的时候还会自动对其进…

Android的前台服务

概述 前台服务是用户主动意识到的一种服务&#xff0c;因此在内存不足时&#xff0c;系统也不会考虑将其终止。前台服务必须为状态栏提供通知&#xff0c;将其放在运行中的标题下方。这意味着除非将服务停止或从前台移除&#xff0c;否则不能清除该通知。 在 Android 8.0&…

python实现一个计算器

实现一个计算器首先熟悉一下这个阅读器的属性import subprocess subprocess.run(["espeak", "-v", "enf3", "This is a Calculator"])class Calculator:def speaker(self,word):subprocess.run(["espeak", "-v", …

Vue学习计划-Vue2--Vue核心(二)Vue代理方式

Vue data中的两种方式 对象式 data:{}函数式 data(){return {} }示例&#xff1a; <body><div id"app">{{ name }} {{ age}} {{$options}}<input type"text" v-model"value"></div><script>let vm new Vue({el: …

ApplicationContextAware 类

优质博文&#xff1a;IT-BLOG-CN 需求&#xff1a; 使用autowired注入一些对象&#xff0c;但发现不可以直接使用Autowired&#xff0c;因为方法是static的&#xff0c;要使用该方法当前对象也必须是static&#xff0c;正常情况下Autowired无法注入静态的bean&#xff0c;于是…

Splashtop 荣获 SDC“年度安全供应商”奖

2023年12月5日 荷兰阿姆斯特丹 Splashtop 是随处办公环境改革的先驱&#xff0c;在伦敦举办的第14届 SDC 颁奖典礼上荣获“年度安全供应商”奖&#xff0c;我们对此感到十分自豪。荣获这一知名奖项凸显了 Splashtop 致力于通过企业级加密和基于权限的访问保护不同规模组织的决…

python进行文件批量命名

目录 1、传递需要修改文件的上一级目录root_path&#xff0c;step的作用是生成不同的文件&#xff0c;convert_format是转化为特定的格式 2、代码使用 1、传递需要修改文件的上一级目录root_path&#xff0c;step的作用是生成不同的文件&#xff0c;convert_format是转化为特…