思路:用ans[]存储频次最高的k个元素,用anslen[]存储对应的索引,将nums进行排序依次统计每个元素出现次数,再判断是否需要对ans[]和anslen[]进行替换,最后ans即为答案
注意点:遍历结束后,还需要进行依次判断是否替换
code:
class Solution {public int[] topKFrequent(int[] nums, int k) {if(nums.length==1)return nums;int ans[]=new int[k];int anslen[]=new int[k];Arrays.sort(nums);int t=nums[0];int len=0;for(int i=0;i<nums.length;i++){if(nums[i]==t)len++;else{int min=Integer.MAX_VALUE;int minpo=-1;for(int j=0;j<k;j++){if(anslen[j]<min){min=anslen[j];minpo=j;}}if(len>anslen[minpo]){ans[minpo]=t;anslen[minpo]=len;}len=1;t=nums[i];}}int min=Integer.MAX_VALUE;int minpo=-1;for(int j=0;j<k;j++){if(anslen[j]<min){min=anslen[j];minpo=j;}}if(len>anslen[minpo]){ans[minpo]=t;anslen[minpo]=len;}return ans;}
}