剑指Offer 03.数组中重复的数字
package Offer; import sun.awt.image.IntegerComponentRaster; import javax.jnlp.IntegrationService; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /*找出任意一个重复的数字*/ public class Test1 { //方法一 //从头到尾扫描全表,时间复杂度为O(n),使用了哈希表,空间复杂度为O(n) /* public int findRepeatNumber(int[] nums) { HashMap<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { //判断是否出现 if (!map.containsKey(nums[i])) { map.put(nums[i], 1); } else { int tmp = map.get(nums[i]); map.put(nums[i], tmp+1); } } int result = -1; //map的遍历一 for (Integer key: map.keySet()) { if (map.get(key) > 1) { result = key; break; } } //map的遍历二 //使用iter迭代器 Iterator it = map.keySet().iterator(); while (it.hasNext()) { Integer key = (Integer)it.next(); if (map.get(key) > 1) { result = key; break; } } //map的遍历三 //使用Entry内部类来表示映射 for (Map.Entry<Integer, Integer> entry: map.entrySet()) { if (entry.getValue() > 1) { result = entry.getKey(); break; } } return result; }*/ //比较交换的方法 //时间复杂度O(n),空间复杂度O(1) public int findRepeatNumber(int[] nums) { if (nums == null || nums.length < 0) { return -1; } for (int i = 0; i < nums.length; i++) { while (i != nums[i]) { if (nums[i] == nums[nums[i]]) { return nums[i]; } else { swap(nums, i, nums[i]); } } } return -1; } //交换数组中的两个数字 public void swap(int[] nums, int index_1, int index_2) { int tmp = nums[index_1]; nums[index_1] = nums[index_2]; nums[index_2] = tmp; } }
作者:Ryanjie
出处:http://www.cnblogs.com/ryanjan/
本文版权归作者和博客园所有,欢迎转载。转载请在留言板处留言给我,且在文章标明原文链接,谢谢!
如果您觉得本篇博文对您有所收获,觉得我还算用心,请点击右下角的 [推荐],谢谢!