一.编程题
给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序。 示例: 输入:[1,3,3,3,2,4,4,4,5] 输出:[3,4,1,2,5]
import java. util. *;
public class TestWrite {
public static void main ( String[ ] args) {
int [ ] arr = { } ;
List list = TestWrite. sortRemovle ( arr) ;
System. out. println ( list. toString ( ) ) ;
}
public static List sortRemovle ( int [ ] arr) {
Map< Integer , Integer> linkedHashMap = new LinkedHashMap < > ( ) ;
for ( int i = 0 ; i < arr. length; i++ ) {
if ( linkedHashMap. get ( arr[ i] ) != null) {
linkedHashMap. put ( arr[ i] , linkedHashMap. get ( arr[ i] ) + 1 ) ;
} else {
linkedHashMap. put ( arr[ i] , 1 ) ;
}
}
List< Map. Entry< Integer, Integer> > list = new ArrayList ( linkedHashMap. entrySet ( ) ) ;
Collections. sort ( list, new Comparator < Map. Entry< Integer, Integer> > ( ) {
@Override
public int compare ( Map. Entry< Integer, Integer> o1, Map. Entry< Integer, Integer> o2) {
return o2. getValue ( ) - o1. getValue ( ) ;
}
} ) ;
List value = new ArrayList ( ) ;
for ( Map. Entry s : list) {
value. add ( s. getKey ( ) ) ;
}
return value;
}
}
地精排序 利用一层循环,进行来回冒泡。对一个乱序数组a[n]实现从小到大排列。
public static void gnomeSort ( int [ ] arr) {
int i = 0 ;
while ( i< arr. length) {
if ( i == 0 || arr[ i - 1 ] <= arr[ i] ) {
i++ ;
} else {
int tmp = arr[ i] ;
arr[ i] = arr[ i- 1 ] ;
arr[ i- 1 ] = tmp;
i-- ;
}
}
}