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

题目:

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);  方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值