<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 給定數組所有旋轉中`i * arr [i]`的最大和 > 原文: [https://www.geeksforgeeks.org/maximum-sum-iarri-among-rotations-given-array/](https://www.geeksforgeeks.org/maximum-sum-iarri-among-rotations-given-array/) 給定`n`個整數的數組`arr[]`,找到使`i * arr [i]`的值的總和最大化的最大值,其中`i`從 0 到`n-1`變化。 **示例**: ``` Input: arr[] = {8, 3, 1, 2} Output: 29 Explanation: Lets look at all the rotations, {8, 3, 1, 2} = 8*0 + 3*1 + 1*2 + 2*3 = 11 {3, 1, 2, 8} = 3*0 + 1*1 + 2*2 + 8*3 = 29 {1, 2, 8, 3} = 1*0 + 2*1 + 8*2 + 3*3 = 27 {2, 8, 3, 1} = 2*0 + 8*1 + 3*2 + 1*1 = 17 Input: arr[] = {3, 2, 1} Output: 7 Explanation: Lets look at all the rotations, {3, 2, 1} = 3*0 + 2*1 + 1*2 = 4 {2, 1, 3} = 2*0 + 1*1 + 3*2 = 7 {1, 3, 2} = 1*0 + 3*1 + 2*2 = 7 ``` **方法 1 **:此方法討論**樸素溶液**,該過程花費`O(n^2)`的時間。 解決方案涉及找到每次旋轉中數組所有元素的總和,然后確定最大總和值。 * **方法**:一個簡單的解決方案是嘗試所有可能的旋轉。 計算每次旋轉的`i * arr[i]`之和,并返回最大和。 * **算法**: 1. 將所有值從 0 旋轉到 n 的數組。 2. 計算每次旋轉的總和。 3. 檢查最大和是否大于當前和,然后更新最大和。 * **實現**: * ## C++ ``` // A Naive C++ program to find maximum sum rotation #include<bits/stdc++.h> using namespace std; // Returns maximum value of i*arr[i] int maxSum(int arr[], int n) { ???// Initialize result ???int res = INT_MIN; ???// Consider rotation beginning with i ???// for all possible values of i. ???for (int i=0; i<n; i++) ???{ ?????// Initialize sum of current rotation ?????int curr_sum = 0; ?????// Compute sum of all values. We don't ?????// acutally rotation the array, but compute ?????// sum by finding ndexes when arr[i] is ?????// first element ?????for (int j=0; j<n; j++) ?????{ ?????????int index = (i+j)%n; ?????????curr_sum += j*arr[index]; ?????} ?????// Update result if required ?????res = max(res, curr_sum); ???} ???return res; } // Driver code int main() { ????int arr[] = {8, 3, 1, 2}; ????int n = sizeof(arr)/sizeof(arr[0]); ????cout << maxSum(arr, n) << endl; ????return 0; } ``` ## Java ``` // A Naive Java program to find // maximum sum rotation import java.util.*; import java.io.*; class GFG { // Returns maximum value of i*arr[i] static int maxSum(int arr[], int n) { // Initialize result int res = Integer.MIN_VALUE; // Consider rotation beginning with i // for all possible values of i. for (int i = 0; i < n; i++) { ????// Initialize sum of current rotation ????int curr_sum = 0; ????// Compute sum of all values. We don't ????// actually rotation the array, but compute ????// sum by finding ndexes when arr[i] is ????// first element ????for (int j = 0; j < n; j++) ????{ ????????int index = (i + j) % n; ????????curr_sum += j * arr[index]; ????} ????// Update result if required ????res = Math.max(res, curr_sum); } return res; } // Driver code public static void main(String args[]) { ????????int arr[] = {8, 3, 1, 2}; ????????int n = arr.length; ????????System.out.println(maxSum(arr, n)); } } // This code is contributed by Sahil_Bansall ``` ## Python3 ``` # A Naive Python 3 program to find # maximum sum rotation import sys # Returns maximum value of i * arr[i] def maxSum(arr, n): ????# Initialize result ????res = -sys.maxsize ????# Consider rotation beginning with i ????# for all possible values of i. ????for i in range(0, n): ????????# Initialize sum of current rotation ????????curr_sum = 0 ????????# Compute sum of all values. We don't ????????# acutally rotation the array, but? ????????# compute sum by finding ndexes when? ????????# arr[i] is first element ????????for j in range(0, n): ????????????index = int((i + j)% n)? ????????????curr_sum += j * arr[index]? ????????# Update result if required ????????res = max(res, curr_sum) ????return res? # Driver code arr = [8, 3, 1, 2]? n = len(arr) print(maxSum(arr, n)) # This code is contributed by # Smitha Dinesh Semwal ``` ## C# ``` // A Naive C# program to find // maximum sum rotation using System; class GFG { ????// Returns maximum value of i*arr[i] ????static int maxSum(int[] arr, int n) ????{ ????????// Initialize result ????????int res = int.MinValue; ????????// Consider rotation beginning with i ????????// for all possible values of i. ????????for (int i = 0; i < n; i++) { ????????????// Initialize sum of current rotation ????????????int curr_sum = 0; ????????????// Compute sum of all values. We don't ????????????// acutally rotation the array, but compute ????????????// sum by finding ndexes when arr[i] is ????????????// first element ????????????for (int j = 0; j < n; j++)? ????????????{ ????????????????int index = (i + j) % n; ????????????????curr_sum += j * arr[index]; ????????????} ????????????// Update result if required ????????????res = Math.Max(res, curr_sum); ????????} ????????return res; ????} ????// Driver code ????public static void Main() ????{ ????????int[] arr = { 8, 3, 1, 2 }; ????????int n = arr.Length; ????????Console.WriteLine(maxSum(arr, n)); ????} } // This code is contributed by vt_m. ``` ## PHP ``` <?php // A Naive PHP program to? // find maximum sum rotation // Returns maximum value // of i*arr[i] function maxSum($arr, $n) { // Initialize result $res = PHP_INT_MIN; // Consider rotation beginning? // with i for all possible? // values of i. for ($i = 0; $i < $n; $i++) { ????// Initialize sum of ????// current rotation ????$curr_sum = 0; ????// Compute sum of all values. ????// We don't actually rotate? ????// the array, but compute sum ????// by finding indexes when? ????// arr[i] is first element ????for ($j = 0; $j < $n; $j++) ????{ ????????$index = ($i + $j) % $n; ????????$curr_sum += $j * $arr[$index]; ????} ????// Update result if required ????$res = max($res, $curr_sum); } return $res; } // Driver code $arr = array(8, 3, 1, 2); $n = sizeof($arr); echo maxSum($arr, $n), "\n"; // This code is contributed by ajit ?> ``` * **輸出**: ``` 29 ``` * **復雜度分析**: * **時間復雜度**: `O(n^2)` * **輔助空間**: `O(1)` **方法 2 **:此方法討論了解決**有效解決方案**的問題,該解決方案可解決`O(n)`時間問題。 在樸素的解決方案中,將為每個旋轉計算值。 因此,如果可以在恒定時間內完成操作,那么復雜度將降低。 * **方法**:基本方法是從以前的旋轉中計算新旋轉的總和。 這樣就產生了相似性,其中只有第一個元素和最后一個元素的乘數急劇變化,而其他元素的乘數則增加或減少 1。因此,可以從當前旋轉的總和中計算出下一個旋轉的總和。 * **算法**: 這個想法是使用先前旋轉的值來計算旋轉的值。 當數組旋轉 1 時,`i * arr[i]`之和發生以下變化。 ``` next_val = curr_val - (cum_sum - arr[i-1]) + arr[i-1] * (n-1); next_val = Value of ∑i*arr[i] after one rotation. curr_val = Current value of ∑i*arr[i] cum_sum = Sum of all array elements, i.e., ∑arr[i]. Lets take example {1, 2, 3}. Current value is 1*0+2*1+3*2 = 8\. Shifting it by one will make it {2, 3, 1} and next value will be 8 - (6 - 1) + 1*2 = 5 which is same as 2*0 + 3*1 + 1*2 ``` 1. `arr[i-1]`的乘數從 0 變為`n-1`,即`arr[i-1] * (n-1)`被加到當前值。 2. 其他項的乘數減 1。即,從`cum_sum`是所有數字之和的當前值減去(`cum_sum – arr[i-1]`)。 * **實現**: ## C++ ``` // An efficient C++ program to compute // maximum sum of i*arr[i] #include<bits/stdc++.h> using namespace std; int maxSum(int arr[], int n) { ????// Compute sum of all array elements ????int cum_sum = 0; ????for (int i=0; i<n; i++) ????????cum_sum += arr[i]; ????// Compute sum of i*arr[i] for initial ????// configuration. ????int curr_val = 0; ????for (int i=0; i<n; i++) ????????curr_val += i*arr[i]; ????// Initialize result ????int res = curr_val; ????// Compute values for other iterations ????for (int i=1; i<n; i++) ????{ ????????// Compute next value using previous? ????????// value in O(1) time ????????int next_val = curr_val - (cum_sum - arr[i-1]) ???????????????????????+ arr[i-1] * (n-1); ????????// Update current value ????????curr_val = next_val; ????????// Update result if required ????????res = max(res, next_val); ????} ????return res; } // Driver code int main() { ????int arr[] = {8, 3, 1, 2}; ????int n = sizeof(arr)/sizeof(arr[0]); ????cout << maxSum(arr, n) << endl; ????return 0; } ``` ## Java ``` // An efficient Java program to compute // maximum sum of i*arr[i] import java.io.*; class GFG { ????static int maxSum(int arr[], int n) ????{ ????????// Compute sum of all array elements ????????int cum_sum = 0; ????????for (int i = 0; i < n; i++) ????????????cum_sum += arr[i]; ????????// Compute sum of i*arr[i] for? ????????// initial configuration. ????????int curr_val = 0; ????????for (int i = 0; i < n; i++) ????????????curr_val += i * arr[i]; ????????// Initialize result ????????int res = curr_val; ????????// Compute values for other iterations ????????for (int i = 1; i < n; i++) ????????{ ????????????// Compute next value using previous ????????????// value in O(1) time ????????????int next_val = curr_val - (cum_sum - ??????????????????????????arr[i-1]) + arr[i-1] * ??????????????????????????(n-1); ????????????// Update current value ????????????curr_val = next_val; ????????????// Update result if required ????????????res = Math.max(res, next_val); ????????} ????????return res; ????} ????// Driver code ????public static void main(String[] args) ????{ ????????int arr[] = {8, 3, 1, 2}; ????????int n = arr.length; ????????System.out.println(maxSum(arr, n)); ????} } // This code is contributed by Prerna Saini ``` ## Python3 ``` # An efficient Python 3 program to # compute maximum sum of i * arr[i] def maxSum(arr, n): ????# Compute sum of all array elements ????cum_sum = 0 ????for i in range(0, n): ????????cum_sum += arr[i]? ????# Compute sum of i * arr[i] for? ????# initial configuration. ????curr_val = 0 ????for i in range(0, n): ????????curr_val += i * arr[i]? ????# Initialize result ????res = curr_val? ????# Compute values for other iterations ????for i in range(1, n): ????????# Compute next value using previous ????????# value in O(1) time ????????next_val = (curr_val - (cum_sum - arr[i-1]) + ????????????????????????????????????arr[i-1] * (n-1)) ????????# Update current value ????????curr_val = next_val? ????????# Update result if required ????????res = max(res, next_val) ????return res? # Driver code arr = [8, 3, 1, 2]? n = len(arr) print(maxSum(arr, n)) # This code is contributed by # Smitha Dinesh Semwal ``` ## C# ``` // An efficient C# program to compute // maximum sum of i*arr[i] using System; class GFG { ????static int maxSum(int []arr, int n) ????{ ????????// Compute sum of all array elements ????????int cum_sum = 0; ????????for (int i = 0; i < n; i++) ????????????cum_sum += arr[i]; ????????// Compute sum of i*arr[i] for? ????????// initial configuration. ????????int curr_val = 0; ????????for (int i = 0; i < n; i++) ????????????curr_val += i * arr[i]; ????????// Initialize result ????????int res = curr_val; ????????// Compute values for other iterations ????????for (int i = 1; i < n; i++) ????????{ ????????????// Compute next value using previous ????????????// value in O(1) time ????????????int next_val = curr_val - (cum_sum - ??????????????????????arr[i - 1]) + arr[i - 1] * ????????????????????????????????????????(n - 1); ????????????// Update current value ????????????curr_val = next_val; ????????????// Update result if required ????????????res = Math.Max(res, next_val); ????????} ????????return res; ????} ????// Driver code ????public static void Main() ????{ ????????int []arr = {8, 3, 1, 2}; ????????int n = arr.Length; ????????Console.Write(maxSum(arr, n)); ????} } // This code is contributed by nitin mittal ``` ## PHP ``` <?php // An efficient PHP program to? // compute maximum sum of i*arr[i] function maxSum($arr, $n) { ????// Compute sum of all ????// array elements ????$cum_sum = 0; ????for ($i = 0; $i < $n; $i++) ????????$cum_sum += $arr[$i]; ????// Compute sum of i*arr[i]? ????// for initial configuration. ????$curr_val = 0; ????for ($i = 0; $i < $n; $i++) ????????$curr_val += $i * $arr[$i]; ????// Initialize result ????$res = $curr_val; ????// Compute values for ????// other iterations ????for ($i = 1; $i < $n; $i++) ????{ ????????// Compute next value using? ????????// previous value in O(1) time ????????$next_val = $curr_val -? ???????????????????($cum_sum - $arr[$i - 1]) +? ????????????????????$arr[$i - 1] * ($n - 1); ????????// Update current value ????????$curr_val = $next_val; ????????// Update result if required ????????$res = max($res, $next_val); ????} ????return $res; } // Driver code $arr = array(8, 3, 1, 2); $n = sizeof($arr); echo maxSum($arr, $n); // This code is contributed by ajit ?> ``` * **輸出**: ``` 29 ``` * **復雜度分析**: * **時間復雜度**: `O(n)`。 由于需要從 0 到 n 的一個循環來檢查所有旋轉,并且當前旋轉的總和是根據`O(1)`時間中的先前旋轉計算得出的)。 * **輔助空間**: `O(1)`。 由于不需要額外的空間,因此空間復雜度將為`O(1)` **方法 3 **:該方法討論使用`O(n)`時間中的樞軸的解決方案。 透視方法只能在排序數組或旋轉排序數組的情況下使用。 例如:`{1, 2, 3, 4}`或`{2, 3, 4, 1}`,`{3, 4, 1, 2}`等。 * **方法**:假設是排序數組的情況。 如我們所知,對于數組,最大和是將數組按升序排序。 在旋轉數組排序的情況下,我們可以旋轉數組以使其升序排列。 因此,在這種情況下,需要找到樞軸元素,然后才能計算出最大和。 * **算法**: 1. **查找數組**的樞軸:如果`arr[i] > arr[(i + 1) % n]`,則它是樞軸元素。`(i + 1) % n`用于檢查最后一個和第一個元素。 2. 獲得樞軸后,可以通過找到與樞軸的差(即乘數)并將其與當前元素相乘,同時計算總和來計算總和 * **實現**: ## C++ ``` // C++ program to find maximum sum of all? // rotation of i*arr[i] using pivot.? #include <iostream> using namespace std;? // fun declaration? int maxSum(int arr[], int n);? int findPivot(int arr[], int n);? // function definition? int maxSum(int arr[], int n)? {? ????int sum = 0;? ????int i;? ????int pivot = findPivot(arr, n);? ????// difference in pivot and index of? ????// last element of array? ????int diff = n - 1 - pivot;? ????for(i = 0; i < n; i++)? ????{? ????????sum = sum + ((i + diff) % n) * arr[i];? ????}? ????return sum;? }? // function to find pivot? int findPivot(int arr[], int n)? {? ????int i;? ????for(i = 0; i < n; i++)? ????{? ????????if(arr[i] > arr[(i + 1) % n])? ????????????return i;? ????}? }? // Driver code? int main(void)? {? ????// rotated input array? ????int arr[] = {8, 3, 1, 2};? ????int n = sizeof(arr) / sizeof(int);? ????int max = maxSum(arr, n);? ????cout << max;? ????return 0;? }? // This code is contributed by Shubhamsingh10? ``` ## C ``` // C program to find maximum sum of all? // rotation of i*arr[i] using pivot. #include<stdio.h> // fun declaration int maxSum(int arr[], int n);? int findPivot(int arr[], int n); // function definition int maxSum(int arr[], int n)? { ????int sum = 0; ????int i; ????int pivot = findPivot(arr, n); ????// difference in pivot and index of? ????// last element of array ????int diff = n - 1 - pivot;? ????for(i = 0; i < n; i++) ????{ ????????sum= sum + ((i + diff) % n) * arr[i]; ????} ????return sum; } // function to find pivot int findPivot(int arr[], int n) { ????int i; ????for(i = 0; i < n; i++) ????{ ????????if(arr[i] > arr[(i + 1) % n]) ????????????return i; ????} } // Driver code int main(void) { ????// rotated input array ????int arr[] = {8, 3, 1, 2};? ????int n = sizeof(arr) / sizeof(int); ????int max = maxSum(arr, n);? ????printf("%d", max); ????return 0;? } ``` ## Java ``` // Java program to find maximum sum? // of all rotation of i*arr[i] using pivot. import java.util.*; import java.lang.*; import java.io.*; class GFG { // function definition? static int maxSum(int arr[], int n)? { ????int sum = 0; ????int i; ????int pivot = findPivot(arr, n); ????// difference in pivot and index of ????// last element of array ????int diff = n - 1 - pivot;? ????for(i = 0; i < n; i++) ????{? ????????sum= sum + ((i + diff) % n) * arr[i]; ????} ????return sum; } // function to find pivot static int findPivot(int arr[], int n) { ????int i; ????for(i = 0; i < n; i++) ????{ ????????if(arr[i] > arr[(i + 1) % n]) ????????????return i; ????} ????return 0; } // Driver code public static void main(String args[]) { ????// rotated input array ????int arr[] = {8, 3, 1, 2};? ????int n = arr.length; ????int max = maxSum(arr,n);? ????System.out.println(max); } } ``` ## Python3 ``` # Python3 program to find maximum sum of? # all rotation of i*arr[i] using pivot.? # function definition? def maxSum(arr, n) : ????sum = 0 ????pivot = findPivot(arr, n) ????# difference in pivot and index? ????# of last element of array? ????diff = n - 1 - pivot? ????for i in range(n) : ????????sum = sum + ((i + diff) % n) * arr[i];? ????return sum # function to find pivot? def findPivot(arr, n) : ????for i in range(n) :? ????????if(arr[i] > arr[(i + 1) % n]) : ????????????return i;? # Driver code? if __name__ == "__main__" : ????# rotated input array? ????arr = [8, 3, 1, 2]? ????n= len(arr)? ????max= maxSum(arr, n) ????print(max) # This code is contributed by Ryuga ``` ## C# ``` // C# program to find maximum sum? // of all rotation of i*arr[i] using pivot.? using System; class GFG { // function definition? public static int maxSum(int[] arr, int n) { ????int sum = 0; ????int i; ????int pivot = findPivot(arr,n); ????// difference in pivot and index of? ????// last element of array? ????int diff = n - 1 - pivot; ????for (i = 0;i < n;i++) ????{ ????????sum = sum + ((i + diff) % n) * arr[i]; ????} ????return sum; } // function to find pivot? public static int findPivot(int[] arr, int n) { ????int i; ????for (i = 0; i < n; i++) ????{ ????????if (arr[i] > arr[(i + 1) % n]) ????????{ ????????????return i; ????????} ????} ????return 0; ????} // Driver code? public static void Main(string[] args) { ????// rotated input array? ????int[] arr = new int[] {8, 3, 1, 2}; ????int n = arr.Length; ????int max = maxSum(arr,n); ????Console.WriteLine(max); } } // This code is contributed by Shrikant13 ``` ## PHP ``` <?php // PHP program to find maximum sum? // of all rotation of i*arr[i] using pivot. // function definition? function maxSum($arr, $n)? { $sum = 0; $pivot = findPivot($arr, $n); // difference in pivot and index of // last element of array $diff = $n - 1 - $pivot;? for($i = 0; $i < $n; $i++) { ????$sum = $sum + (($i + $diff) %? ????????????$n) * $arr[$i]; } return $sum; } // function to find pivot function findPivot($arr, $n) { ????for($i = 0; $i < $n; $i++) ????{ ????????if($arr[$i] > $arr[($i + 1) % $n]) ????????return $i; ????} ????return 0; } // Driver code // rotated input array $arr = array(8, 3, 1, 2);? $n = sizeof($arr); $max = maxSum($arr, $n);? echo $max; // This code is contributed // by Akanksha Rai(Abby_akku) ?> ``` * **輸出**: ``` 29 ``` * **復雜度分析**: * **時間復雜度**: `O(n)` 因為只需要一個循環就可以從 0 遍歷到 n,從而找到樞軸。 為了找到總和,需要另一個循環,因此復雜度保持為`O(n)`。 * **輔助空間**:`O(1)`。 我們不需要額外的空間,因此輔助空間為`O(1)`
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看