leetcode_442. Find All Duplicates in an Array 找数组中出现两次的数,正负号标记法

来源:互联网 发布:java a星寻路算法 编辑:程序博客网 时间:2024/05/22 20:29

题目:

Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.

Find all the elements that appear twice in this array.

Could you do it without extra space and in O(n) runtime?

Example:

Input:[4,3,2,7,8,2,3,1]Output:[2,3]

题意:

给定一个整数数组,1≤a[i]≤n(n =数组大小),一些元素出现两次,其他元素出现一次。

查找在此数组中出现两次的所有元素。

你能做它没有额外的空间和在O(n)运行时?


代码:

public class Solution {
    public List<Integer> findDuplicates(int[] nums) {
        // List res = new ArrayList();
        List res = new LinkedList();              //定义list类型,用于返回
        
        int n = nums.length;
        int i = 0;
        for(i=0; i<n; i++){
            int temp = Math.abs(nums[i]);      //取出原始的nums[i]对应的数
            if( nums[temp-1]<0 ){                    //判断这个数作为下标,在nums中的数是否为负,如果是负,则表示之前出现过
                res.add(temp);
            }
            else{
                nums[temp-1] = -nums[temp-1];
            }
        }
       return res; 
    }
}


笔记:

1、java定义List类型的数据有两种方式:

List res = new ArrayList();

List res = new LinkedList();   

添加一个元素,用res.add(temp);  方法

0 0
原创粉丝点击