C++の辞書式順序でK番目に小さい
2つの値nとkがあるとします。辞書式順序で1からnの範囲でk番目に小さい整数を見つける必要があります。したがって、入力がn=14およびk=3の場合、シーケンスは[1、10、11、12、13、14、2、3、4、5、6、7になるため、出力は11になります。 、8、9]の場合、k番目の数値は11です。
これを解決するには、次の手順に従います-
- 関数findKthNumber()を定義します。これには、n、k、 が必要です。
- curr:=1
- (kを1つ減らす)
- kがゼロ以外の場合、-
- を実行します。
- steps:=関数calcSteps(n、curr、curr + 1)を呼び出します
- ステップ<=kの場合、-
- k:=k-ステップ
- (currを1増やします)
- それ以外の場合
- curr:=curr * 10
- k:=k-1
- リターンカー
- 関数calcSteps()を定義します。これには、nax、n1、n2、 が必要です。
- ret:=0
- n1 <=naxの場合、-
- を実行します
- ret:=ret+最小のnax+1およびn2– n1
- n1:=n1 * 10
- n2:=n2 * 10
- return ret
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
int findKthNumber(int n, int k) {
int curr = 1;
k--;
while(k){
int steps = calcSteps(n, curr, curr + 1);
if(steps <= k){
k -= steps;
curr++;
}else{
curr *= 10;
k -= 1;
}
}
return curr;
}
int calcSteps(lli nax, lli n1, lli n2){
int ret = 0;
while(n1 <= nax){
ret += min(nax + 1, n2) - n1;
n1 *= 10;
n2 *= 10;
}
return ret;
}
};
main(){
Solution ob;
cout << (ob.findKthNumber(14,3));
} 入力
14,3
出力
11
-
C ++のBST(BSTの順序統計量)でk番目に小さい要素を検索します
二分探索木があり、入力として値Kがあるとすると、ツリー内でK番目に小さい要素を見つける必要があります。 したがって、入力が次のような場合 k =3の場合、出力は15になります。 これを解決するには、次の手順に従います- 関数find_kth_smallest()を定義します。これは、root、count、k、を取ります。 ルートがNULLの場合、- NULLを返す left =find_kth_smallest(rootの左側、カウント、k) leftがNULLでない場合、- 左に戻る (カウントを1つ増やします) count
-
辞書式順序(辞書順)で要素をソートするC++プログラム
辞書式順序は、アルファベット順のアルファベット順に基づいて、単語がリスト内で順序付けられる方法を示します。例- List of words: Harry Adam Sam Lexicographical order of words: Adam Harry Sam 辞書式順序で要素をソートするプログラムは次のとおりです- 例 #include <iostream> using namespace std; int main() { int i,j; string s[5], temp; cout<