シンプルでよいコードである.成程,HashSetのcontains()ならO(1)だ.
http://codereview.stackexchange.com/questions/9909/intersection-of-arrays-java
テストしたと書いていながら若干間違いがあるので,以下のように書き直し.
package org.tanuneko;
import java.util.*;
public class Intersect {
private static List<Integer> intersect( final List<Integer> a, final List<Integer> b ) {
Set<Integer> canAdd = new HashSet<Integer>(a);
List<Integer> result = new ArrayList<>();
for( int n : b ) {
if( canAdd.contains(n) ) {
result.add(n);
canAdd.remove(n);
}
}
return result;
}
public static void main( String args[] ) {
List<Integer> a = Arrays.asList( 4,2,6,1,8,9,5 );
List<Integer> b = Arrays.asList( 8,6,3,5,0,10,1 );
System.out.println( intersect( a,b ) );
}
}
0 件のコメント:
コメントを投稿