小言_互联网的博客

剑指Offer面试题3:题目一:找出数组中重复的数字的java实现

291人阅读  评论(0)
package offer;

import java.util.ArrayList;
import java.util.List;

public class Third {
	public static void main(String[] args) {

		int[] nums = { 2, 3, 1, 0, 2, 5, 3 };
		List<Integer> repeatNums = new ArrayList<>();
		duplicate(nums, repeatNums);
		System.out.println("重复数字:" + repeatNums);

		System.out.print("原数组:");

		for (int num : nums) {
			System.out.print(num);
		}
	}

	private static void duplicate(int[] nums, List<Integer> repeatNums) {

		if (nums == null)
			return;

		for (int num : nums) {

			if (num < 0 || num > nums.length - 1)
				return;
		}

		for (int i = 0; i < nums.length; i++) {

			while (nums[i] != i) {

				// 因为该数出现在了它本该出现的位置上,所以重复。
				if (nums[i] == nums[nums[i]]) {
					repeatNums.add(nums[i]);
					break;
				}

				// 把当前位置上的数字放到自己应该出现的位置上。
				int temp = nums[i];
				nums[i] = nums[temp];
				nums[temp] = temp;
			}
		}
	}
}


转载:https://blog.csdn.net/qq_17564151/article/details/101386469
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场