358 K 距離間隔重排字串

2021-10-11 08:40:16 字數 1471 閱讀 4097

題目描述:

給你乙個非空的字串 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 ...