方法一:位图法,原理是首先申请一个长度为n且均为’0’组成的字符串,字符串的下标即为数组a[]中的元素,然后从头开始遍历数组a[N],取每个数组元素的值,将其对应的字符串中的对应位置置1,如果已经置过1,那么该数就是重复的数。由于采用的是位图法,所以空间复杂度比较大,为O(N).

代码如下:

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
bool xor_findDup(int * arr, int NUM)
{
int *arrayflag = (int *)malloc(NUM*sizeof(int));
int i = 1;
while (i < NUM)
{
arrayflag[i] = false;
i++;
}
for (i = 0; i < NUM; i++)
{
if (arrayflag[arr[i]] == false)
{
arrayflag[arr[i]] = true;
}
else
return true;
}
}
int main()
{
int a[] = {1,7,4,2,1,4,3,1};
if (xor_findDup(a, 8))
printf("存在重复元素");
else
printf("不存在重复元素");
getchar();
return 0;
}

  方法二:对数组进行排序,然后比较相邻的元素是否相同。C++标准库提供了快速排序的方法qsort(),可以直接用的。

代码如下:

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
int comp(const void *a, const void *b)
{
return (*(int *)a = *(int *)b);
}
int isArrayRepeat(int *a, int n)
{
int i = 0;
if (!a || n < 1)
return -1;
qsort(a, n, sizeof(int), comp);
for (i = 0; i < n - 1; i++)
{
if (a[i] == a[i + 1])
return 1;
}
return 0;
}
int main()
{
int result = -1;
int a[10] = { 10, 9, 5, 4, 7, 6, 3, 2, 1, 9 };
result = isArrayRepeat(a, 10);
if (result)
printf("yes\n");
else
printf("n0\n");
getchar();
return 0;
}

  效果如图:

方法三:遍历数组,假设第i个位置的数字为i,则j的范围为1~n。通过交换将j换到下表为j-1的位置上。直到所有数字都出现在自己对应的下标处,或发生了冲突,即该位置已经被占。此时的时间复杂度为O(n)。

代码如下:

#include "stdafx.h"
#include <stdio.h>
int isArrayRepeat(int *a, int n)
{
int j = -1;
for (int i = 0; i < n; i++)
{
j = a[i];
if (i == j - 1)
continue;
if (a[i] == a[j - 1])
return 1;
a[i] = a[j - 1];
a[j - 1] = j;
i--;
}
return 0;
}
void main()
{
int result = -1;
int a[10] = { 10, 9, 5, 4, 7, 6, 3, 2, 1, 9 };
result = isArrayRepeat(a, 10);
if (result)
printf("yes\n");
else
printf("no\n");
getchar();
}

  效果如图:

假设数组a有n个元素,元素取值范围是1~n,如何判定数组是否存在重复元素的更多相关文章

  1. 面试题:给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字

    题目:给定一个长度为N的数组,其中每个元素的取值范围都是1到N.判断数组中是否有重复的数字.(原数组不必保留) 方法1.对数组进行排序(快速,堆),然后比较相邻的元素是否相同.时间复杂度为O(nlog ...

  2. jQuery对html元素的取值与赋值实例详解

    jQuery对html元素的取值与赋值实例详解 转载  2015-12-18   作者:欢欢   我要评论 这篇文章主要介绍了jQuery对html元素的取值与赋值,较为详细的分析了jQuery针对常 ...

  3. (转)jquery对表单元素的取值和赋值

    /*获得text的值*/ var textval =$("#text_id").attr("value"); //或者 var textval =$(" ...

  4. jQuery对表单元素的取值和赋值操作代码

    使用常规的思路:$(“#keyword”).value 取值是取不到的,因为此时$(‘#keydord’)已经不是个element,而是个jquery对象,所以应该使用:$(“#keyword”).v ...

  5. 常用html元素的取值和赋值方法总结

    1.获得type类型为TEXT或者AREATEXT的值 var textval = $("#text_id").attr("value"); var textv ...

  6. jQuery对表单元素的取值和赋值操作代码(转)

    使用常规的思路:$("#keyword").value 取值是取不到的,因为此时$('#keydord')已经不是个element,而是个jquery对象,所以应该使用:$(&qu ...

  7. jquery 元素文本取值/赋值

    select元素选中option值 jq $("#select1 option:selected").text(); $("select id或class option: ...

  8. doc元素select 取值

  9. Cookie是以文本文件保存在客户端的,所以说cookie对象从本质而言是 字符串,所以取值时用字符串,或其数组

  10. 74 使用BitSet输出数组中的重复元素

    [本文链接] http://www.cnblogs.com/hellogiser/p/using-bitset-to-print-duplicate-elements-of-array.html [题 ...

随机推荐

  1. Parse how to write flash in uefi shell.

    Step: 1.     Enable 2.     Read 3.     Write 4.     Disable FI_GUID gEfiSFlashProtocolGuid = FLASH_P ...

  2. mysql查找有某列但没有此列索引的表

    select a.TABLE_SCHEMA,a.TABLE_NAME from information_schema.`COLUMNS` a left join (select 'etl_stamp' ...

  3. 【C】——pthread_mutex_lock

    函数名 pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_unlock - lock and unlock a mutex SYNOPS ...

  4. 【嵌入式】——对#define GPBCON (*(volatile unsigned long*)0x56000010)的理解

    #define GPBCON (*(volatile unsigned long*)0x56000010) 1:volatile 当计算机需要一个数值的时候,会先把内存中的值读取到寄存器,然后下次在使 ...

  5. 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)

    一.Qt环境设置 文件从window上传到Ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK.Windows环境下,Qt Creator,菜单-&g ...

  6. Linux的内存管理

    Linux的内存管理,实际上跟windows的内存管理有很相像的地方,都是用虚拟内存这个的概念,说到这里不得不骂MS,为什么在很多时候还有很大的物理内存的时候,却还是用到了pagefile. 所以才经 ...

  7. Ogre 编辑器一(MyGUI+Ogre整合与主界面)

    在查看Ogre例子时,想看材质要里的纹理,着色器代码都需要每个去查找,非常麻烦.也想看更新每个Ogre里的对象后有什么效果.然后看到Compositor组件与粒子组件时,想到能实时编辑着色器代码实时更 ...

  8. 【转载】Linux命令行常用光标移动快捷键

    声明:下面内容来自:http://www.linuxidc.com/Linux/2016-10/136027.htm, 来源:linux社区  作者:aslongas 我转载于此处,为了作个笔记,方便 ...

  9. 第三百四十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫数据保存

    第三百四十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫数据保存 注意:数据保存的操作都是在pipelines.py文件里操作的 将数据保存为json文件 spider是一个信号检测 ...

  10. 使用Maven清理项目

    在基于Maven的项目中,很多缓存输出在“target”文件夹中.如果想建立项目部署,必须确保清理所有缓存的输出,从面能够随时获得最新的部署. 要清理项目缓存的输出,发出以下命令: mvn clean ...