Program JavaScript untuk mencari nilai maksimum Sum( i*arr), membenarkan hanya putaran tatasusunan yang diberikan

PHPz
Lepaskan: 2023-08-25 12:09:02
ke hadapan
935 orang telah melayarinya

JavaScript 程序查找 Sum( i*arr) 的最大值,仅允许对给定数组进行旋转

Kami akan menggunakan kaedah matematik untuk mencari nilai maksimum jumlah hasil darab indeks dan nilai unsur dalam tatasusunan. Dengan memutar tatasusunan, kita boleh memaksimumkan jumlah ini dengan meletakkan nilai maksimum tatasusunan pada indeks dengan produk terbesar. Algoritma yang akan kami gunakan melibatkan mencari jumlah produk indeks digandakan nilai elemen, dan kemudian menambah pada jumlah itu perbezaan antara jumlah itu dan hasil darab panjang tatasusunan dengan jumlah nilai indeks.

Pada masa hadapan, kami akan terus menggunakan algoritma ini pada tatasusunan yang berbeza untuk mencari nilai maksimum jumlah indeks dan hasil darab nilai elemen hanya membenarkan putaran. Penyelesaian ini sangat cekap kerana ia hanya memerlukan satu laluan melalui tatasusunan dan mempunyai kerumitan masa O(n). Dengan menggunakan algoritma ini kita boleh dengan cepat dan mudah mencari jumlah maksimum produk indeks dan nilai elemen dalam tatasusunan.

Kaedah

  • Jumlah semua putaran boleh diperoleh dengan mendarab setiap elemen dalam tatasusunan dengan indeks yang sepadan dan menambah hasilnya.

  • Nilai maksimum boleh diperolehi dengan mencari indeks nilai maksimum dan memutarkan tatasusunan supaya nilai maksimum adalah elemen pertama.

  • Nilai maksimum boleh didapati dengan menjumlahkan nilai setiap elemen didarab dengan indeksnya dan membandingkannya dengan nilai maksimum semasa.

  • Jumlah semua putaran boleh didapati dengan menambah jumlah semua putaran kepada jumlah semasa dan membahagikan dengan bilangan putaran.

  • Boleh mengembalikan nilai maksimum sebagai hasilnya.

Contoh

Penyelesaian kepada masalah ini adalah dengan mencari jumlah semua elemen dalam tatasusunan dahulu, kemudian lelaran ke atas putaran tatasusunan dan kemas kini jumlahnya dengan menambah perbezaan putaran semasa kepada jumlah sebelumnya. Jumlah maksimum adalah jawapannya. Berikut ialah contoh JavaScript yang lengkap -

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
Salin selepas log masuk

Arahan

    Fungsi
  • maxSum mengambil tatasusunan sebagai input dan mengembalikan jumlah maksimum yang boleh diperolehi dengan memutar tatasusunan dan mengambil jumlah i * arr[i] untuk setiap putaran.

  • Pembolehubah n menyimpan panjang tatasusunan.

  • Pembolehubah arrSum menyimpan jumlah semua elemen dalam tatasusunan dan dimulakan kepada 0.

  • Pembolehubah currVal menyimpan jumlah i * arr[i] untuk putaran semasa dan dimulakan kepada 0.

  • Gelung pertama mengira jumlah semua elemen dalam tatasusunan dan hasil tambah i * arr[i] untuk putaran pertama.

  • Pembolehubah maxVal menyimpan jumlah maksimum dan dimulakan kepada currVal.

  • Gelung kedua memutarkan tatasusunan secara berulang dan mengemas kini jumlah i * arr[i] untuk setiap putaran. Jumlah i * arr[i] untuk putaran semasa dikemas kini dengan menambah perbezaan putaran semasa kepada jumlah sebelumnya.

  • Nilai
  • currVal dikemas kini dengan menambah perbezaan antara jumlah i * arr[i] untuk putaran semasa dan jumlah i * arr[i] untuk putaran sebelumnya. Perbezaan dikira dengan menolak n * arr[n - j] daripada arrSum.

  • Nilai maksimum currVal untuk setiap putaran disimpan dalam maxVal menggunakan fungsi Math.max.

  • Akhirnya mengembalikan nilai maxVal sebagai jawapan.

Atas ialah kandungan terperinci Program JavaScript untuk mencari nilai maksimum Sum( i*arr), membenarkan hanya putaran tatasusunan yang diberikan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!