leetCode每日十题---排序

题目描述1

在这里插入图片描述

笔者解答1.1

class Solution {
    
    
    public int[] relativeSortArray(int[] arr1, int[] arr2) {
    
    
      Map<Integer,Integer> map=new HashMap<Integer,Integer>();
      HashSet<Integer> set=new HashSet<Integer>();
      int[] match=new int[arr1.length];
      for(int i=0;i<arr1.length;i++)
          match[i]=0;
      for(int i=0;i<arr1.length;i++){
    
    
          map.put(arr1[i],map.getOrDefault(arr1[i],0)+1);
      } 
      for(int i=0;i<arr2.length;i++){
    
    
          set.add(arr2[i]);
      }
      PriorityQueue<Integer> queue=new PriorityQueue<>();
      for(Integer i:map.keySet()){
    
    
        if(!set.contains(i)){
    
    
            queue.offer(i);
        }
      }
      int[] str=new int[arr1.length];
      int count=0;
      for(int i=0;i<arr2.length;i++){
    
    
          int j=map.get(arr2[i]);
          for(;j>0;j--){
    
    
              str[count]=arr2[i];
              count++;
          }
      }  
      for(int i=count;i<arr1.length;){
    
    
          int temp=queue.poll();
          int j=map.get(temp);
          for(;j>0;j--){
    
    
              str[i]=temp;
              i++;
          }
      }
      return str;
    }
}

笔者分析1.2

现在还没有从堆的阴影中走出来,看到什么题都会想到用数据结构,所以,这题虽然简单,我的第一反应还是用数据结构,当然了,无论是时间还是空间,效率都不高。没有花时间去想更好的方法,只是花时间去想如何实现当前已有的笨方法。下面看下比较简单的方法,说实话,在刷了90道leetcode题以前,我的惯用思路就是这样的。。。

public int[] relativeSortArray(int[] arr1, int[] arr2) {
    
    
        int[] nums = new int[1001];
        int[] res = new int[arr1.length];
        //遍历arr1,统计每个元素的数量
        for (int i : arr1) {
    
    
            nums[i]++;
        }
        //遍历arr2,处理arr2中出现的元素
        int index = 0;
        for (int i : arr2) {
    
    
            while (nums[i]>0){
    
    
                res[index++] = i;
                nums[i]--;
            }
        }
        //遍历nums,处理剩下arr2中未出现的元素
        for (int i = 0; i < nums.length; i++) {
    
    
            while (nums[i]>0){
    
    
                res[index++] = i;
                nums[i]--;
            }
        }
        return res;
 }

题目描述2

在这里插入图片描述

笔者解答2.1

class Solution {
    
    
    public String minNumber(int[] nums) {
    
    
     int i,j;
     PriorityQueue<Integer> queue=new PriorityQueue<>((o1,o2)->{
    
    
         String str1=""+o1+""+o2;
         String str2=""+o2+""+o1;
         return str1.compareTo(str2);
     });
     for(i=0;i<nums.length;i++)
      queue.offer(nums[i]);
      String str="";
      while(!queue.isEmpty())
         str+=""+queue.poll();
      return str;   
    }
}

笔者分析2.2

这题算是个简单题,但还是想说一点,写题目时一定要将想法和演算啥的都用笔记下来,这样才能找到规律。不然的话,很多明明不成立的关系,却认为是限制条件,自己给自己加难度。。。

总结

这次写的题目都比较简单,堆的困难题只写了一半,原因是我想明天周日把一些常用的数据结构及其方法整理出来。当然,会以博客的形式发出来,本来想周日的话就不刷题了,干些其它事,但想想还是算了,虽然要比平常多写一篇总结性质的博客,也应该能挤出刷题的时间。每日十题打卡第九天,以下图为证
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Achenming1314/article/details/108414927