leetcode-442-數組中重複的數據


本題是leetcode,地址:442. 數組中重複的數據java

題目

給定一個整數數組 a,其中1 ≤ a[i] ≤ n (n爲數組長度), 其中有些元素出現兩次而其餘元素出現一次。數組

找到全部出現兩次的元素。設計

你能夠不用到任何額外空間並在O(n)時間複雜度內解決這個問題嗎?code

示例:blog

輸入:
[4,3,2,7,8,2,3,1]leetcode

輸出:
[2,3]get

分析

這道題設計的很巧(keng)妙(die),能解決這道題的前提是看懂題目預設數據特色:整數、取值範圍:1 ≤ a[i] ≤ n;微博

基於這兩點,設計思路是:class

  1. 找到數字i時,將位置i-1處的數字翻轉爲負數。
  2. 若是位置i-1 上的數字已經爲負,則i是出現兩次的數字。

這樣代碼也就出來了;List

code

public List<Integer> findDuplicates(int[] nums) {
        List<Integer> rs = new ArrayList<>();
        for(int index = 0; index < nums.length; index ++) {
            int v = Math.abs(nums[index]);
            int v2 = nums[v -1];
            if(v2 < 0) {
                rs.add(v);
            } else {
                nums[v -1] = -nums[v -1];
            }
        }
        return rs;
    }

你的鼓勵也是我創做的動力

打賞地址

相關文章
相關標籤/搜索