博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.数组中重复的数字
阅读量:7235 次
发布时间:2019-06-29

本文共 1464 字,大约阅读时间需要 4 分钟。

题目描述

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。
 
解法一:不修改数组找出重复的数字
如果在不修改输入数组的前提下,我们可以创建一个长度为n+1的辅助数组,然后逐一把原数组的每个数字复制到辅助数组。如果原数组中被复制的数字是m,则把它复制到辅助数组中下标为m的位置。这样很容易发现哪个数字是重复的,由于需要创建一个数组,该方案需要O(n)的辅助空间。
 下面这个思路是典型的拿空间换时间,时间上,只需要遍历一遍就把所有事情都做了,代价就是花费了额外的两个数组来存储数据
public class Test17 {    public static void main(String[] args) {        int[] numbers = { 2, 3, 2, 0, 2, 5, 3 };        int[] flag = new int[numbers.length];        int[] duplication = new int[numbers.length - 1];        duplicate(numbers, flag, duplication);        for (int i = 0; i < flag.length; i++) {            System.out.print(flag[i]);        }        System.out.print("\r\n");        for (int i = 0; i < duplication.length; i++) {            System.out.print(duplication[i]);        }    }    public static void duplicate(int[] numbers, int[] flag, int[] duplication) {        int num = 0;//加一个int型的位置标记,标记出现了几个重复的数字了        for (int i = 0; i < duplication.length; i++) {            duplication[i] = -1;// 不加这个的话,默认全是0,如果0重复了你怎么存,你怎么知道0重复没重复        }        for (int i = 0; i < numbers.length; i++) {
//for循环里不能有return,保证全部遍历一遍 flag[numbers[i]]++; if (flag[numbers[i]] == 2) {
// 重复其实可以理解成出现次数2次;>1是出现次数大于1的,包括重复的,包括重复好大于2次的;如果统计出现次数3次的呢,就改成3 duplication[num++] = numbers[i]; } } }}

 测试用例:

长度为n的数组里包含一个或者多个重复是数字;

数组中不包含重复的数字。

无效输入测试用例(输入空指针)

 

 

转载地址:http://gdlfm.baihongyu.com/

你可能感兴趣的文章
Android创建桌面快捷方式
查看>>
使用Configuration Manager配置软件清单
查看>>
SWIFT中计算两个日期间隔多少小时
查看>>
平台XXXX系统无响应故障报告
查看>>
Django 数据库ORM操作 - 单表的创建,增加,删除,更改和查询
查看>>
Memcache监控工具 -- memkeys
查看>>
a disk read error occurred
查看>>
Windows下完成端口移植Linux下的epoll
查看>>
Absolute Uninstaller是类似于标准的Windows添加/删除卸载工具
查看>>
Linux+shell管理员的好帮手--批量解压缩
查看>>
Windows Server 2008 R2 之十八WDS(部署服务)之二
查看>>
多模块项目的POM重构
查看>>
三、System Center Virtual Machine Manager 2012 添加VMware ESXi 5.0主机
查看>>
MDSF:模型驱动开发(MDD)介绍
查看>>
Oracle-压缩数据
查看>>
XenServer 6.5实战系列之五:XenCenter 6.5
查看>>
PXE方式安装Centos5详解
查看>>
气泡图在开源监控工具中的应用效果
查看>>
让Ubuntu和Android同时运行(Ubuntu on Android)
查看>>
Error 6 initializing SQL*Plus,解决方案:
查看>>