牛客 HJ3 明明的随机数 (Java 哈希表排序)


牛客 HJ3 明明的随机数 (Java 哈希表排序)

 

 牛客 HJ3 明明的随机数 (Java 哈希表排序)

 

 

思路:
法1:使用哈希表,可以保证无重复值。然后取出所有value放入数组。
接着数组排序。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;


public class Main {
    public static void main(String[] args) throws IOException {
        int len = 0;//输入的个数N
        int element = 0;
        Object[] number = {0};//无重复元素的数组
        
        
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        Map<Integer,Integer> ages = new HashMap<Integer,Integer>();
       
        //System.out.println(br.readLine());
        //System.out.println(br.readLine());
        len = Integer.parseInt(br.readLine());//首行为元素个数
        //System.out.println(len);
        for(int num=0;num<len;num++){//将数值放入哈希表。确保元素不重复
            element = Integer.parseInt(br.readLine());
            //System.out.println(element);
            if(ages.containsKey(element)){//若哈希表中有重复元素
                continue;
            }else{//若不重复则放入哈希表
                ages.put(element,num);
                //System.out.println(num+","+element);
            }
        }
        //哈希表排序
        number = ages.keySet().toArray();//将KeySet返回的key值集合转为数组
        Arrays.sort(number);//排序
        for(Object key : number){//打印数组元素
            System.out.println(key);
        }
    }
}

 

法2:还是暴力拆解呗,万能暴力。
每拿一个数,都循环看看有没有重复,没有重复就放入。
最后数组排序
 
 

 
谷歌:
1.String和int互转
JAVA 中 string 和 int 互相转化 | 菜鸟教程 (runoob.com)
String转int:

 

int i = Integer.parseInt([String]);//i = Integer.parseInt([String],[int radix]);
int i = Integer.valueOf(my_str).intValue();

int转String:

String s = String.valueOf(i);
String s = Integer.toString(i);
String s = ""+i;;

 

2.java集合转数组
(14条消息) java集合转数组(Collection转array)_皮皮go的博客-CSDN博客_java 集合转数组

 

Object[] toArray();

 

 
3.哈希表排序
(14条消息) Java HashMap按key排序和按value排序的两种简便方法_xHibiki的博客-CSDN博客_java哈希表排序
按Key值:
KeySet()方法将哈希表中所有key值放入集合
Set.toArray(arr)方法将集合转为数组
Arrays.sort(arr)数组排序

 

Set set = ages.KeySet();//拿到Key集合
Object[] arr = set.toArray();//集合转数组
Arays.sort(arr);//数组排序
for(Object key:arr){//打印出排序好的数组
    System.out.println(key);
}

 

按Value值:
先得到entrySet。然后将Set转成List。再重写list的比较器得到结果。

 

//拿到entrySet并转list
List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(ages.entrySet());

//list排序
//法1 重写Comparator比较器
list.sort(new Comparator<Map.Entry<String,Integer>>(){
    @Override
    public int compare(Map.Entry<String,Integer> o1,Map.Entry<String,Integer> o2){
        return o2.getValue().compareTo(o1.getValue());
    }
});
//法2 重写Collection.sort()排序
Collection.sort(list,new Comparator<Map.Entry<String,Integer>>(){
    @Override
    public int compare(Map.Entry<String,Integer>o1, Map.Entry<String,Integer> o2){
        return o2.getValue().compareTo(o1.getValue());
    }
})

 

 

原创文章,作者:306829225,如若转载,请注明出处:https://blog.ytso.com/278070.html

(0)
上一篇 2022年7月31日
下一篇 2022年7月31日

相关推荐

发表回复

登录后才能评论