假設我有一個大小為 100 的陣列。最初,假設所有元素的值都為 0。現在,假設我要插入 60 個元素,以使元素均勻填充。我不希望從arr[0]to填充所有元素arr[59]。相反,我希望以這樣一種方式填充整個陣列,使陣列看起來被填充。我可以使用什么演算法來實作這一點?
例如-
在大小為 10 的陣列中,我有 5 個元素要填充(假設為 1)。那么陣列應該如下所示:
[1,0,1,0,1,0,1,0,1,0]
在 3 個元素的情況下,
[1,0,0,0,1,0,0,0,1,0]
有什么聰明的方法可以動態地做到這一點嗎?
uj5u.com熱心網友回復:
您需要找到合適的間隙長度以均勻填充它。為此,我們對正確的間隙進行二進制搜索,該間隙最均勻地填充間隙,使得沒有。應該填充的 1 不會超出陣列范圍。
在沒有的情況下。要填充的部分大于陣列大小的一半,我們盡可能用長度為 2 的間隙填充它,并填充彼此相鄰的剩余部分。
function solve(arraySize, oneCount) {
let newArray = Array(arraySize).fill(0);
let low = 0,
high = arraySize;
let gap = 0;
while (low <= high) {
let mid = (low high) >> 1;
if (mid * (oneCount - 1) < arraySize) {
gap = mid;
low = mid 1;
} else {
high = mid - 1;
}
}
let needsEvenDivision = oneCount > (arraySize >> 1) && gap === 1;
gap = needsEvenDivision ? 2 : gap;
let idx = 0;
while (idx < arraySize && oneCount > 0) {
newArray[idx] = 1;
oneCount--;
if (needsEvenDivision && arraySize - idx - 2 < oneCount) gap = 1;
idx = gap;
}
return newArray;
}
console.log(solve(4, 2));
console.log(solve(10, 4));
console.log(solve(10, 7));
uj5u.com熱心網友回復:
問題是這樣的:
有一個 60 毫米長的橡膠,每 1 毫米有一個刻度。當這個橡膠被拉伸到 100 毫米的長度時,每個刻度的位置在哪里?
int main(void)
{
constexpr int M= 10;
constexpr int n = 5;
//initially all 0
int Array[M] = { 0 };
//Calclate where the ith element of the n elements should go in the result array
for( int i=0; i<n; i )
{
int idx = (int)std::round( (double)i * M / n);
Array[idx] = 1;
}
//Show Result
for( auto a : Array ){ std::cout << a << " "; }
std::cout << std::endl;
return 0;
}
uj5u.com熱心網友回復:
這是您可以做的事情
function populateArray(arraySize, arrayElements) {
const newArray = [];
if (arraySize >= arrayElements) {
const parts = Math.ceil(arraySize / arrayElements);
for (let i = 0; i < arraySize; i ) {
if (i % parts == 0) {
newArray.push(1);
} else {
newArray.push(0);
}
}
return newArray;
}
return "Invalid array Size";
}
console.log(populateArray(10, 3));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523835.html
標籤:数组算法数学
上一篇:用戶輸入轉義字符時無法提取值
下一篇:從陣列陣列創建嵌套物件陣列
