challenge 重複する要素を取り除く

与えられたリストxsの中から、 2回以上出現するものを全部取り除いてください。

サンプル入力
[3, 1, 4, 1, 5, 9, 2, 6, 5]
サンプル出力
[3, 4, 9, 2, 6]

これはアレイのuniqの派生問題です。 リストとかアレイという言葉は言語によってまちまちの意味で使われているので、 「配列のようなもの」という漠然とした意味にとって構いません。

Posted feedbacks - Java


	
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import java.util.*;

public class UniqOnly {
	public static void main(String[] args) {
		List<Integer> list = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5);
		
		Set<Integer> counter = new HashSet<Integer>();
		Set<Integer> dup = new HashSet<Integer>();
		
		for (int i = 0, n = list.size(); i < n; i++) {
			if(!counter.add(list.get(i))) {
				dup.add(list.get(i));
			}
		}
		list = new LinkedList<Integer>(list);
		list.removeAll(dup);
		System.out.println(list);
	}
}

sawat氏のとほとんど同じですが一応投稿。
(クラス名、変数名は参考にさせていただきました)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import java.util.*;
public class UniqueOnly {
    public static void main(String[] args) {
        int[] xs = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9};
        List res = unique(xs);
        System.out.println(res);    // => [4, 2, 6, 8, 7]
    }
    public static List<Integer> unique(int[] xs) {
        LinkedHashSet<Integer> set = new LinkedHashSet<Integer>();
        HashSet<Integer> dup = new HashSet<Integer>();
        for (int x : xs) {
            if (!set.add(x)) dup.add(x);
        }
        set.removeAll(dup);
        return new ArrayList<Integer>(set);
    }
}

Index

Feed

Other

Link

Pathtraq

loading...