python 練習題 NC97 字符串出現次數的TopK問題


地址:https://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee?tpId=188&&tqId=38637&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking

 

 

 1 '''
 2 描述
 3 給定一個字符串數組,再給定整數k,請返回出現次數前k名的字符串和對應的次數。
 4 返回的答案應該按字符串出現頻率由高到低排序。如果不同的字符串有相同出現頻率,按字典序排序。
 5 對於兩個字符串,大小關系取決於兩個字符串從左到右第一個不同字符的 ASCII 值的大小關系。
 6 比如"ah1x"小於"ahb","231"<”32“
 7 字符僅包含數字和字母
 8 
 9 [要求]
10 如果字符串數組長度為N,時間復雜度請達到O(N \log K)O(NlogK)
11 
12 示例1
13 輸入:
14 ["a","b","c","b"],2
15 復制
16 返回值:
17 [["b","2"],["a","1"]]
18 說明:
19 "b"出現了2次,記["b","2"],"a"與"c"各出現1次,但是a字典序在c前面,記["a","1"],最后返回[["b","2"],["a","1"]]
20  
21 示例2
22 輸入:
23 ["123","123","231","32"],2
24 返回值:
25 [["123","2"],["231","1"]]
26 說明:
27  "123"出現了2次,記["123","2"],"231"與"32"各出現1次,但是"231"字典序在"32"前面,記["231","1"],最后返回[["123","2"],["231","1"]] 
28 
29 '''
30 
31 '''
32 1.先計數並存轉成list格式
33 2.先按照 出現數字降序 再按照字符升序排序
34 '''
35 
36 #
37 # return topK string
38 # @param strings string字符串一維數組 strings
39 # @param k int整型 the k
40 # @return string字符串二維數組
41 #
42 class Solution:
43     def topKstrings(self , strings , k ):
44         # write code here
45         res = {}
46         for i in strings:
47             if i not in res.keys():
48                 res[i] = 1
49             else:
50                 res[i] +=1
51         resList = []
52         for i in res.keys():
53             resList.append([i,res[i]])
54         resList.sort(key=lambda i : (-i[1],i[0]))
55         return resList[:k]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM