アルゴリズムは書きます.行列を並べて階段を進める.JavaScriptとJavaを実現します.

1685 ワード

配列は重くなり、O(n)の複雑さが要求され、入力された配列は以下のようになり、重複したidを除去し、最大のwを保持し、元の順序を変更しないように要求される.
const union = [
    { id: 1, w: 1 },
    { id: 2, w: 4 },
    { id: 1, w: 2 },
    { id: 2, w: 6 }
]
JavaScript実現
O(n)複雑さが要求されるので、ES 6 Mapオブジェクト(ハッシュテーブルと同様)が使用され、元の配列を変更する代わりに新しい配列が返される(要素を削除すると、他の要素の下付きを移動する).今はまだ二つの問題があります.1.Mapオブジェクトを使うと元素の順序が保証できません.2.行列を出力するためには、Mapオブジェクトを巡回します.
function removeDuplicateElements(arr) {
    let map = new Map();
    let res = [];
    for (let i=0; i
Java実現
Javaの中の集合類Linked HashMapを使って元素の順序の問題を解決したいですが、Javaが一つの対象配列のテスト用例を生成するのが面倒で、長い間苦労しました.テスト用例を生成して無理に実現しました.論理コードの後で補充します.
package com.company;

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

public class RemoveDuplicateElements {
    public Map getElement(int id, int w) {
        return Map.of("id",id, "w",w);
    }
    public List> getTestCase() {
        List> list = new ArrayList<>();
        int[] idList = {1,2,1,2}, wList = {1,4,2,6};
         for (int i=0; i<4; i++) {
            list.add(getElement(idList[i], wList[i]));
        }
        return list;
    }
    public static void main(String[] args) {
        RemoveDuplicateElements removeDuplicateElements = new RemoveDuplicateElements();
        List> testCase = removeDuplicateElements.getTestCase();
        System.out.println(testCase);
    }
}