題目描述:
給你乙個非空的字串 s 和乙個整數 k,你要將這個字串中的字母進行重新排列,使得重排後的字串中相同字母的位置間隔距離至少為 k。
所有輸入的字串都由小寫字母組成,如果找不到距離至少為 k 的重排結果,請返回乙個空字串 「」。
示例 1:
輸入: s = 「aabbcc」, k = 3
輸出: 「abcabc」
解釋: 相同的字母在新的字串中間隔至少 3 個單位距離。
示例 2:
輸入: s = 「aaabc」, k = 3
輸出: 「」
解釋: 沒有辦法找到可能的重排結果。
示例 3:
輸入: s = 「aaadbbcc」, k = 2
輸出: 「abacabcd」
解釋: 相同的字母在新的字串中間隔至少 2 個單位距離。
方法1:
主要思路:解題彙總
(1)先將原字串的各個字元的數量進行統計;
(2)然後使用優先佇列,將各個字元的數量和對應的字元壓入到佇列中,使用數量進行排序;
(3)使用貪心的思想,盡量先拍數量多的字元,每次從佇列中取出 k 個元素,將其對應的字元放入到結果字串中;
(4)這個過程中,需要判斷當前要放入結果字串的字元是否在當前位置之前的k個位置內出現過,若出現過,則直接返回空字元;
(5)若沒有出現過,則將當前字元對應的數量減一,若此時數量仍不為0,則重新壓入佇列中;
(6)直到隊列為空;
class
solution
vector<
int>
counts(26
,0);
//統計各個字元的數量
for(
char
&ch:s)
//使用優先佇列儲存字元的數量和對應的字元
priority_queueint,
int>
,vectorint,
int>>
,lessint,
int>>
> q;
for(
int i=
0;i<26;
++i));
}}string res;
//結果字串
//若佇列不為空
while
(!q.
empty()
)for
(int j=
0;j++j)
res+
=ch;
//將當前字元加到結果字串的尾部
//將當前字元的數量減1,若還不為0,則重新壓入佇列中if(
--tmp[j]
.first)}}
return res;}}
;
knn距離度量影響 KNN中K以及 距離度量
從k近鄰演算法 距離度量談到kd樹 sift bbf演算法 結構之法 演算法之道 csdn部落格 blog.csdn.net knn中的k值選取對k近鄰演算法的結果會產生重大影響。如李航博士的一書 統計學習方法 上所說 如果選擇較小的k值,就相當於用較小的領域中的訓練例項進行 學習 近似誤差會減小,...
歐氏距離的矩陣實現 k近鄰分類器
在這個程式裡有130個訓練樣本也就是矩陣x,每個樣本實際上就是乙個點,它的第一行和第二行分別是它的橫縱座標 有2500個測試樣本也就是矩陣y,每個樣本實際上也是乙個點,第一行和第二行分別是它的橫縱座標。距離函式的主體 如下 xx sum x.2,1 1 130 yy sum y.2,1 d repm...
leetcode 719 找出第 k 小的距離對
描述 給定乙個整數陣列,返回所有數對之間的第 k 個最小距離。一對 a,b 的距離被定義為 a 和 b 之間的絕對差值。示例 1 2 len nums 10000.0 nums i 1000000.1 k len nums len nums 1 2.思路桶排序 class solution for ...