`
xinyiwust
  • 浏览: 13155 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

n+1个范围是0~n的数字,找出所有重复的数字,O(n)基础上不用额外空间

阅读更多
n+1个范围是0~n的数字,找出所有重复的数字,O(n)基础上不用额外空间。

算法思想:

使用数组的值对应数组的下标,出现多对一的则说明重复。

算法:

     遍历数组,每次访问前判断数组是否访问过(访问过的会被置为负数);
     如果没访问过,则以当前数组的值为数组下标,访问其值:
          若为负数,则此元素被访问过,即数组下标在数组值中多次出现,重复;
          若非负,则此元素没被访问过,将其标记为访问过(取负值,0取数组长度的负        值);
    如果访问过(访问过的数为负数),则再取负为数组下标(如果是数组长度,表明是0),访问其值:
          若为负数,则此元素被访问过,即数组下标在数组值中多次出现,重复;
          若非负,则此元素没被访问过,将其标记为访问过(取负值,0取数组长度的负        值)。

算法如下:
public static void alg(int[] array){
for(int i=0;i<array.length;i++){
if(0>array[i]){
if(-array.length == array[i]){
if(0>array[0])
System.out.println(0);
}
else if(0>array[-array[i]]){
System.out.println(-array[i]);
}
else{
if(0 == array[-array[i]])
array[-array[i]] = -array.length;
else if(array[-array[i]]>0)
array[-array[i]]=-array[-array[i]];
}
}
else{
if(0>array[array[i]]){
System.out.println(array[i]);
}
else{
if(0 == array[array[i]])
array[array[i]] = -array.length;
else if(array[array[i]]>0)
array[array[i]]=-array[array[i]];
}
}
}
}

测试如下:
public static void main(String[] args) {
int[] array = new int[100];
/* array[0] = 1;
array[1] = 2;
array[2] = 0;
array[3] = 4;
array[4] = 0;*/
for(int i=0;i<100;i++)
array[i]=i;
array[5]=0;
array[1] = 1;
array[3] = 1;
array[89] = 80;
alg(array);
}
分享到:
评论

相关推荐

    struts+spring+hibernate基础整合包+数据库Mysql+C3p0

    资源中包含ssh整合的基础java包可以进行基础开发,如果需要额外的功能,则需加入对应依赖的包。数据库的链接包是MySQl数据库,链接使用的C3P0 SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种...

    N = D = 3 + 3中的(2,0)自对偶非阿贝拉张量多重生成D = 2 + 2中的N =(1,1)个自对偶系统

    我们在D = 3 + 3维度上制定了一个N =(2,0)系统,该系统由Yang-Mills(YM)-倍数(AˆμˆI,λˆI),自对偶非阿贝尔张量倍数(BˆμˆνˆI,χˆI,φˆI ),以及一个额外的向量多重态(CˆμˆI,ρˆI)。...

    batch-loader:避免N + 1数据库或HTTP查询的强大工具

    批量加载器 这个gem提供了一种通用的惰性批处理机制,可以避免N + 1个DB查询,HTTP查询等。 这些公司的开发人员使用BatchLoader : 内容 强调 通用实用程序,可避免N + 1个... 让我们看一下带有N + 1个查询的代码

    计算机网络原理第五版复习题——第N+1次修订版

    计算机网络重点复习题,简答题习题1-02 试简述分组交换的要点。 答:采用存储转发技术,在发送报文之前,先把较长的报文划分成为一个个等长的数据段,然后再加上一些控制信息构成一个分组。分组根据首部的控制信息在...

    数据结构试题 第1章 绪论

    (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B....

    python入门基础(讲义+代码)

    Python 拥有一个强大的标准库,Python 语言的核心只包含数字、字符串、列表、字典、文件 等常见类型和函数,而由 Python 标准库提供了 系统管理、网络通信、文本处理、数据库接口、图形系统、XML 处理 等额外的功能 ...

    C语言FAQ 常见问题列表

    o 5.1 我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么问题? char *p; *p = malloc(10); o 5.2 *p++ 自增 p 还是 p 所指向的变量? o 5.3 我有一个 char * 型指针正巧指向一些 int 型变量, 我想...

    solidworks快捷键

    重复上一命令:Enter 在 PropertyManager 或对话框中访问在线帮助:F1 在 FeatureManager 设计树中重新命名一项目(对大部分项目适用):F2 展开或折叠 FeatureManager设计树:c 重建模型:Ctrl+B ...

    算法分析与设计习题集答案

    26、 设计一个O(n2)时间的算法,找出由n个数组成的序列的最长的单调递增子序列。 27、 旅游预算问题。一个旅行社需要估算乘汽车从某城市到另一城市的最小费用,沿路有若干加油站,每个加油站收费不一定相同。旅游...

    Java实现基数排序算法(源代码)

    基数排序的时间复杂度为O(d*(n+k)),其中d为数字的位数,n为待排序数字的数量,k为基数的大小(如十进制数的k为10)。该算法适用于非负整数的排序,并且不受数据初始状态的影响。然而,基数排序需要额外的存储空间来...

    leetcode中国-Data_Structures-Algorithms:待补充!!

    leetcode中国数据结构和算法 数组 问题: 完成[是或否] 反转数组 查找数组中的最大和最小元素 ...k,找出出现次数超过“n/k”次的所有元素。 最多两次买卖股票的最大利润 判断一个数组是否是另一个数组的子集 找

    基于人脸识别的门禁管理系统(Python+Django+RESTframework+JsonWebToken)+源码+开发文档

    项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于人脸识别的门禁管理系统(Python+Django+RESTframework+JsonWebToken)+源码+开发文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试...

    Vue + Element-ui的下拉框el-select获取额外参数详解

    直接上代码吧~ 用户类型 width=180&gt; placeholder=请选择 change=changeRole($event,scope)&gt; &lt;el-option v-for=item in roles :key=item.value :l

    手写体数字从0到9图像数据集

    手写体数字从0到9图像数据集,此数据集包含200张手写体数字图像。所有的数字都是作者在白纸上手写的,然后用智能手机相机拍摄。拍完照片后,额外的白色区域被裁剪。手写体数字从0到9图像数据集,此数据集包含200张...

    TCP拦截和网络地址转换

    S Y N位的报文被发往一台主机,以便在设备的侦听端口上建立一个 T C P连接。但是,这些报文中的源 I P地址是伪造的。这些报文中所设置的源地址都是不可达 的地址;在大多数情况下,源地址要么是来自 R F C 1 9 1 ...

    通过附加的希格斯三重态玻色子建立νn→νn反应与nn振荡之间的联系

    在这项工作中,我们基于带有额外的希格斯三重态的SU(3)c×SU(2)L×U(1)对称模型,研究νn→νn反应与nn振荡之间的联系和相容性。 我们探索了由低能太阳中微子产生的散射过程νn→νn产生测量n-n振荡的不可避免...

    磁颤动,希格斯分支和6d N $$ \ mathcal {N} $$ =(1,0)理论-正交和辛规范群

    着眼于M5黄铜的6维N $$ \ mathcal {N} $$ =(1,0)世界体积理论,真空模空间有两个分支,它们是张量多重态中的标量场还是标量 在超多重采样中获得不平凡的真空期望值。 正如以前的工作所建议的,每当BPS弦变得无...

    计算机二级公共基础&计算机基础知识点汇总.docx

    §1.3 线性表及其顺序存储结构 线性表: 线性表是n(n 0)个数据元素构成的有限序列,表中除第一个元素外的每一个元素,有且只有一个前件,除最后一个元素外,有且只有一个后件。 举例:英文字母表、地理学中的四向...

    LeetCode判断字符串是否循环-AC_Offer:剑指Offer刷题Java代码

    在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,...

Global site tag (gtag.js) - Google Analytics