查詢 C++ 中使用給定數字可形成的最大數


假設我們有一個數字陣列。我們必須找到使用該陣列的所有數字可以獲得的最大數。因此,如果該陣列類似於 [3, 3, 9, 6, 2, 5],則最大數可以是 965332。

根據這個問題,我們可以看到我們很容易按非遞減順序對數字進行排序,然後打印出來。但是,我們可以使用更有效的方法來解決這個問題。我們可以建立一個大小為 10 的陣列來儲存每個數字的頻率,然後相應地從 9 到 0 列印數字。

示例

 即時演示

#include <iostream>
#include <string>
using namespace std;
int maxNumFromNum(int arr[], int n) {
   int freq[10] = {0};
   for (int i=0; i<n; i++)
   freq[arr[i]]++;
   int res = 0, mul = 1;
   for (int i = 0; i <= 9; i++) {
      while (freq[i] > 0) {
         res = res + (i * mul);
         freq[i]--;
         mul = mul * 10;
      }
   }
   return res;
}
int main() {
   int digits[] = {3, 3, 9, 6, 2, 5};
   int n = sizeof(digits)/sizeof(digits[0]);
   cout << "Maximum number: " << maxNumFromNum(digits, n);
}

輸出

Maximum number: 965332

更新日期: 2019 年 12 月 18 日

250 次瀏覽

開啟你的 職業生涯

透過完成課程取得認證

開始學習
廣告
© . All rights reserved.