我已按降序對陣列進行排序(a[0] 是最大的)
int [n] a;
陣列中的每個專案都有一個整數,其值范圍為:0 -> 9。我想從陣列中的專案構造數字,這樣:
number[0] = a[0]*pow(10,0);
number[1] = a[0]*pow(10,1) a[1]*pow(10,0);
number[2] = a[0]*pow(10,2) a[1]*pow(10,1) a[2]*pow(10,0);
number[3] = a[0]*pow(10,3) a[1]*pow(10,2) a[2]*pow(10,1) a[3]*pow(10,0);
number[n] = a[0]*pow(10,n-1) ... a[n-1]*pow(10,0)
例如,如果我有一個陣列 [4] = {9,8,7,6}; 我會有以下數字:{9 ,98 ,987, 9876}
任何人都可以使用 for 回圈、遞回或任何機智的演算法以及它的時間 空間復雜度來教育我嗎?
到目前為止我的嘗試:
int numberA = 0;
vector<int>numberAList;
numberA = num[0]*(pow(10,0));
numberAList.push_back(numberA);
numberA = 0;
for (int i = 0; i < n-1; i ){
for (int j = i 1; j<n-1; j ){
numberA = num[i]*pow(10,n-1-j);
cout<<"numberA"<<numberA<<endl;
}
numberAList.push_back(numberA);
}
for (int i = 0; i < (n-2); i ){
cout<<numberAList[i]<<" ";
}
根據user1984的建議。我找到了解決方案:
int numberA=0;
vector<int>numberAList;
for (int i = 0; i < n-1 ; i ){
numberA *= 10;
numberA = num[i];
cout<<i<<", numberA: "<<numberA<<endl;
numberAList.push_back(numberA);
}
for (int i = 0; i < n-1; i ){
cout<<numberAList[i]<<" ";
}
The time and space complexity for this is just log(n)
uj5u.com熱心網友回復:
這看起來像是一項任務,所以我不會提供代碼,而是提供一種(希望如此)清晰的方法,可以幫助您以您喜歡的任何語言解決問題。
- 有一個變數
current來跟蹤您所在的當前值 res當您遍歷輸入陣列時,有一個陣列來累積結果,nums.- 對于
nums_i陣列中的每個nums,按照順序執行以下操作:
current *= 10current = nums_i- 將電流推到
res
而已。我認為這種方法是不言自明的,但是如果您覺得需要更多詳細說明,請詢問。
uj5u.com熱心網友回復:
,std::partial_sum你可能會做
std::vector<int> nums{9, 8, 7, 6};
std::vector<int> res(nums.size());
std::partial_sum(nums.begin(), nums.end(),
res.begin(),
[](int acc, int n){ return 10 * acc n; });
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410211.html
標籤:
下一篇:二叉樹每一層的最大值
