剑指offer刷题笔记(Java版)---- 找出数组重复数字

题目描述

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

简单而言就是:找出数组中重复的数字存入到一个数组中。

 解法一:简单想法就是利用hashmap,遍历数组放入hashmap中,每次判断当前的数字是否已经存在hashmap中,存在的话就把这个数字放入到duplication数组中;

思考:本题目也可迁移求 1.数组中重复的数字及重复的次数(遇到相同的key让hashmap的value+1)2.求出现K次重复的数字(同1,记录重复次数后,遍历hashmap)

import java.util.*;
public class Solution {
    public boolean duplicate(int numbers[],int length,int [] duplication) {
        HashMap hs=new HashMap();
        int j=0;
        for(int i=0;i

解法2:利用hashmap不能插入重复key的性质,异常处理时存入数组找到重复数字。这个严重错误!hashmap可以插入相同的key。会覆盖掉原来的元素!可以使用不能重复插入元素的集合。set集合不可以重复,但是try好像捕获不到,也行不通哈哈。。算了!这个使用try的思想可以记住,有时候会用到。

import java.util.*;
public class Solution {
    public boolean duplicate(int numbers[],int length,int [] duplication) {
        HashMap hs=new HashMap();
        int j=0;
        for(int i=0;i0){
            return true;
        }else{
            return false;
        }
    }
}

 

你可能感兴趣的:(Algorithm,JAVA)