수학적 방법을 사용하여 인덱스 곱과 배열 요소 값의 합계의 최대값을 찾습니다. 배열을 회전시키면 가장 큰 제품이 있는 인덱스에 배열의 최대값을 배치하여 이 합계를 최대화할 수 있습니다. 우리가 사용할 알고리즘은 인덱스와 요소 값의 곱의 합을 찾은 다음 해당 합계와 배열 길이 곱하기 인덱스 값의 곱 간의 차이를 그 합에 추가하는 것입니다.
앞으로 우리는 이 알고리즘을 다양한 배열에 계속 적용하여 회전만 허용하는 요소 값과 인덱스의 합과 곱의 최대값을 찾을 것입니다. 이 솔루션은 배열을 한 번만 통과하면 되고 시간 복잡도는 O(n)이므로 매우 효율적입니다. 이 알고리즘을 사용하면 배열 요소의 인덱스와 값의 곱의 최대 합계를 빠르고 쉽게 찾을 수 있습니다.
모든 회전의 합은 배열의 각 요소에 해당 인덱스를 곱하고 그 결과를 더하여 얻을 수 있습니다.
최대값은 최대값의 인덱스를 찾아 최대값이 첫 번째 요소가 되도록 배열을 회전시키면 얻을 수 있습니다.
최대값은 각 요소의 값에 해당 인덱스를 곱한 후 현재 최대값과 비교하여 찾을 수 있습니다.
모든 스핀의 합은 현재 합계에 모든 스핀의 합을 더한 후 스핀 수로 나누어 구할 수 있습니다.
최대값을 결과로 반환할 수 있습니다.
이 문제에 대한 해결책은 먼저 배열에 있는 모든 요소의 합을 찾은 다음 배열 회전을 반복하고 이전 합계에 현재 회전의 차이를 더하여 합계를 업데이트하는 것입니다. 최대합계가 답입니다. 다음은 완전한 JavaScript 예제입니다 -
으아악함수 maxSum는 배열을 입력으로 사용하고 배열을 회전하고 각 회전에 대해 i * arr[i]의 합을 취하여 얻을 수 있는 최대 합계 를 반환합니다.
Variable 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 값을 답으로 반환합니다.
위 내용은 주어진 배열의 회전만 허용하여 Sum(i*arr)의 최대값을 찾는 JavaScript 프로그램의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!