我們將使用數學方法來尋找索引與陣列中元素值的乘積總和的最大值。透過旋轉數組,我們可以透過將數組的最大值放置在具有最大乘積的索引處來最大化該總和。我們將使用的演算法涉及查找索引與元素值的乘積總和,然後將該和與陣列長度與索引值總和的乘積之間的差值加到該和中。
將來,我們將不斷將此演算法應用於不同的數組,以找到索引與僅允許旋轉的元素值的乘積總和的最大值。此解非常高效,因為它只需要一次遍歷數組,時間複雜度為 O(n)。透過使用該演算法,我們可以快速輕鬆地找到數組中元素的索引與值的乘積的最大和。
所有旋轉的總和可以透過將陣列中的每個元素與其對應的索引相乘並將結果相加來獲得。
可以透過找到最大值的索引並旋轉陣列使最大值成為第一個元素來獲得最大值。
最大值可以透過將每個元素的值與其索引相乘求和並與當前最大值進行比較來找到。
所有旋轉的總和可以透過將所有旋轉的總和加到目前總和並除以旋轉的次數來得出。
可以傳回最大值作為結果。
解決該問題的方法是,首先求數組中所有元素的總和,然後迭代旋轉數組,並透過將當前旋轉的差值與前一個總和相加來更新總和。最大總和就是答案。這是一個完整的 JavaScript 範例 -
function maxSum(arr) { let n = arr.length; let arrSum = 0; let currVal = 0; for (let i = 0; i < n; i++) { arrSum += arr[i]; currVal += i * arr[i]; } let maxVal = currVal; for (let j = 1; j < n; j++) { currVal = currVal + arrSum - n * arr[n - j]; maxVal = Math.max(maxVal, currVal); } return maxVal; } let arr = [1, 20, 2, 10]; console.log(maxSum(arr)); // Output: 72
函數maxSum以數組作為輸入,並返回通過旋轉數組並取 i * arr[i]之和可以獲得的最大和 b> 每次旋轉。
變數n儲存陣列的長度。
變數arrSum儲存陣列中所有元素的總和,並初始化為0。
變數currVal儲存目前輪替的 i * arr[i]總和,並初始化為0。
第一個迴圈計算陣列中所有元素的總和以及第一次旋轉的 i * arr[i] 的總和。
變數maxVal儲存最大和初始化為currVal。
第二個循環迭代地旋轉陣列並更新每次旋轉的 i * arr[i] 總和。目前旋轉的 i * arr[i]總和透過將目前旋轉的差異加到先前的總和來更新。
currVal的值透過新增目前輪替的 i * arr[i]總和與總和之間的差異來更新>i * arr[ i] 用於上一次旋轉。差值的計算方法是從 arrSum 中減去 n * arr[n - j]。
每次旋轉的currVal最大值使用Math.max函數儲存在maxVal。
最後回傳maxVal的值作為答案。
以上是JavaScript 程式尋找 Sum( i*arr) 的最大值,僅允許對給定陣列進行旋轉的詳細內容。更多資訊請關注PHP中文網其他相關文章!