leetcode 442. 数组中重复的数据 java

题目:

给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。

找到所有出现两次的元素。

你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?

示例:

输入:
[4,3,2,7,8,2,3,1]

输出:
[2,3]

解题:

class Solution {
    public List<Integer> findDuplicates(int[] nums) {
        List<Integer> res = new ArrayList<>();
        if (nums == null || nums.length == 0) return res;
        for (int i = 0; i < nums.length; i++) {
            int index = Math.abs(nums[i]) - 1;
            if (nums[index] > 0) nums[index] *= -1; //用负号表示已经有一次了
            else {
                res.add(index + 1); //index + 1 == Math.abs(nums[i])
            }
        }
        return res;
    }
}

原文地址:https://www.cnblogs.com/yanhowever/p/10896984.html

时间: 2024-11-05 19:41:58

leetcode 442. 数组中重复的数据 java的相关文章

LeetCode 442.数组中重复的数据 - JavaScript

题目描述:给定一个整数数组 a,其中 1 ≤ a[i] ≤ n (n 为数组长度), 其中有些元素出现两次而其他元素出现一次. 找到所有出现两次的元素. 你可以不用到任何额外空间并在 O(n)时间复杂度内解决这个问题吗? 题目分析 这里的不使用任何额外空间,指的是不为哈希表开辟额外空间.最后要返回的元素,还是要放在数组内的. 解法 :原地哈希 因为不能使用额外空间存储哈希表,所以只能对数组本身做操作.题目提到元素的范围是 1 到 n,并且元素只可能出现 1 次或者 2 次. 因此这里可以使用符号

leetcode 442. 数组中重复的数据(Find All Duplicates in an Array)

目录 题目描述: 示例: 解法: 题目描述: 给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次. 找到所有出现两次的元素. 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗? 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [2,3] 解法: class Solution { public: vector<int> findDuplicates(vector<int>& nums) {

3. 数组中重复的数字[java]

题目描述  在线编程 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次.请找出数组中任意一个重复的数字. Input: {2, 3, 1, 0, 2, 5} Output: 2 解题思路 时间复杂度 O(N),空间复杂度 O(1) 对于范围0到n-1的数组,最好方法是将数字0放到位置0,数字1放到位置1,以此类推.  若当前遍历到的数字若与之前遍历过的数重复,即为重复数; 例如上面的例子,当遍历到第5

数组中重复的数字 java

今天开始用java写算法题目. 题目大意,一个长度为 n 的数组,里面存放的数组是 0 到 n-1,数组中有重复数字的话就输出这个数字. 思路:将每个 nums[i] 的值 移动到他原来应该属于的地方,如果那个地方的值和现在的值相等,就重复了. 因为 java 不会使用,有下列语法错误. 1.给数组赋值的时候,直接写在后面.同时 int [ ] 里面不要放数组的长度. 2.swap 函数,交换的数组的两个值.不需要什么指针之类的, 直接写就好. public class test { publi

(Java) 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,

442 Find All Duplicates in an Array 数组中重复的数据

给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次.找到所有出现两次的元素.你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?示例:输入:[4,3,2,7,8,2,3,1]输出:[2,3]详见:https://leetcode.com/problems/find-all-duplicates-in-an-array/description/ C++: 方法一: class Solution { public: vector

JS删除数组中重复的数据

Array.delRepeat = function (arr) {   var _arr = arr.slice(0),retArr = [];   for (var i = 0, len = _arr.length; i < len; i++) {     for (var j = i + 1; j < len; j++) {       if (_arr[i] == _arr[j]) {         break;       }     }     if (j == len) {  

[Swift]LeetCode442. 数组中重复的数据 | 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,

去掉有序数组中重复数字 原地 leetcode java (最简单的方法)

1.利用荷兰国旗的思路,每次记住最后一个位置,遇到一个不重复的数,放在它后面,代码很简单. Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with consta