給一非空的單詞列表,返回前 k 個出現次數最多的單詞。
返回的答案應該按單詞出現頻率由高到低排序。如果不同的單詞有相同出現頻率,按字母順序排序。
示例 1:
輸入: [「i」, 「love」, 「leetcode」, 「i」, 「love」, 「coding」], k = 2示例 2:輸出: [「i」, 「love」]
解析: 「i」 和 「love」 為出現次數最多的兩個單詞,均為2次。
注意,按字母順序 「i」 在 「love」 之前。
輸入: [「the」, 「day」, 「is」, 「sunny」, 「the」, 「the」, 「the」, 「sunny」, 「is」, 「is」], k = 4注意:輸出: [「the」, 「is」, 「sunny」, 「day」]
解析: 「the」, 「is」, 「sunny」 和 「day」 是出現次數最多的四個單詞,出現次數依次為 4, 3, 2 和 1 次。
class
solution
//構建hashmap
$map=[
];foreach
($words
as$w
)else
}$arr=[
];foreach
($map
as$word
=>
$num
)unset
($map);
$len
=count
($map);
//構建heap
for($i=
0;$i<$k;
$i++
)$this
->
len=
count
($this
->
heap);
$this
->
create_heap()
;//追加
for($i=
$k;$i<
$len;$i
++)elseif(
$this
->
heap[0
]['num']==
$arr[$i
]['num'])
}else
}//排序
$this
->
sort()
;$ret=[
];foreach
($this
->
heap
as$item
)return
$ret;}
function
create_heap()
}/**
* 根index 調整某棵樹的左右節點
**/function
adjust_heap
($index)$l
=($index
<
<1)
+1;$r
=($index
<
<1)
+2;$min
=$index;if
($l<
$len
&&$this
->
heap[$l
]['num'
]<
$this
->
heap
[$min][
'num'])
if($l<
$len
&&$this
->
heap[$l
]['num']==
$this
->
heap
[$min][
'num']&&
$this
->
heap[$l
]['word'
]>
$this
->
heap
[$min][
'word'])
if($r<
$len
&&$this
->
heap[$r
]['num'
]<
$this
->
heap
[$min][
'num'])
if($r<
$len
&&$this
->
heap[$r
]['num']==
$this
->
heap
[$min][
'num']&&
$this
->
heap[$r
]['word'
]>
$this
->
heap
[$min][
'word'])
if($min
!=$index)}
public
function
sort()
}}
演算法 leetcode 前K個高頻單詞
給一非空的單詞列表,返回前 k 個出現次數最多的單詞。返回的答案應該按單詞出現頻率由高到低排序。如果不同的單詞有相同出現頻率,按字母順序排序。使用map統計詞頻,並構建兩個list以相同順序分別存放詞頻和對應字串 構建最小堆,根據詞頻同步調整兩個list 注意比較兩個單詞詞頻的時候,如果詞頻相等,還...
前k個高頻單詞
題目 給一非空的單詞列表,返回前 k 個出現次數最多的單詞。返回的答案應該按單詞出現頻率由高到低排序。如果不同的單詞有相同出現頻率,按字母順序排序。示例 1 輸入 i love leetcode i love coding k 2 輸出 i love 解析 i 和 love 為出現次數最多的兩個單詞...
前K個高頻單詞
解題思路 static class mycomparator implements comparator override public intcompare string o1,string o2 o1 o1 o2返回 0 o1 o2返回0 count1 count2公升序排序 count2 co...