日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 396. 旋转函数(数学)

發布時間:2024/7/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 396. 旋转函数(数学) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

給定一個長度為 n 的整數數組 A 。

假設 Bk 是數組 A 順時針旋轉 k 個位置后的數組,我們定義 A 的“旋轉函數” F 為:

F(k) = 0 * Bk[0] + 1 * Bk[1] + ... + (n-1) * Bk[n-1]

計算F(0), F(1), …, F(n-1)中的最大值。

注意:
可以認為 n 的值小于 105

示例: A = [4, 3, 2, 6] F(0) = (0 * 4) + (1 * 3) + (2 * 2) + (3 * 6) = 0 + 3 + 4 + 18 = 25 F(1) = (0 * 6) + (1 * 4) + (2 * 3) + (3 * 2) = 0 + 4 + 6 + 6 = 16 F(2) = (0 * 2) + (1 * 6) + (2 * 4) + (3 * 3) = 0 + 6 + 8 + 9 = 23 F(3) = (0 * 3) + (1 * 2) + (2 * 6) + (3 * 4) = 0 + 2 + 12 + 12 = 26所以 F(0), F(1), F(2), F(3) 中的最大值是 F(3) = 26

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/rotate-function
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 高中數學解題

F(0) 可算出
所有 A[i] 的總和 為 S
F(i+1)?F(i)=S?n?A[n?i?i]F(i+1)-F(i) = S-n*A[n-i-i]F(i+1)?F(i)=S?n?A[n?i?i]
右邊的差值 diff 上一次的 diff 迭代到下一次,需要 +n?A[n?i?1]?n?A[n?i?2]+n*A[n-i-1]-n*A[n-i-2]+n?A[n?i?1]?n?A[n?i?2]

class Solution { public:int maxRotateFunction(vector<int>& A) {int F_i = 0, diff = 0, ans = INT_MIN, n = A.size();for(int i = 0, k = 0; i < n; ++i,++k){F_i += k*A[i];if(i != A.size()-1)diff += A[i];elsediff -= i*A[i];}ans = F_i; //f(0)for(int i = 1; i < n; ++i){F_i += diff;//f(i+1) = f(i)+diffif(F_i > ans)ans = F_i;//取最大diff += n*(A[n-i]-A[n-i-1]);//diff 差值更新}return ans;} };

總結

以上是生活随笔為你收集整理的LeetCode 396. 旋转函数(数学)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。