当前位置:网站首页>396. Rotate Function
396. Rotate Function
2022-04-23 08:17:00 【SUNNY_ CHANGQI】
Descption of problem
You are given an integer array nums of length n.
Assume arrk to be an array obtained by rotating nums by k positions clock-wise. We define the rotation function F on nums as follow:
F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * arrk[n - 1].
Return the maximum value of F(0), F(1), ..., F(n-1).
The test cases are generated so that the answer fits in a 32-bit integer.
source : Power button (LeetCode)
link :https://leetcode-cn.com/problems/rotate-function
Chinese version
Given a length of n Array of integers for nums .
hypothesis arrk It's an array nums Clockwise rotation k Array after position , We define nums Of Rotation function F by :
F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * arrk[n - 1]
return F(0), F(1), ..., F(n-1) Maximum of .
The generated test cases make the answers meet the requirements 32 position Integers .
source : Power button (LeetCode)
link :https://leetcode-cn.com/problems/rotate-function
Solution_1
- generate the array by rotating the nus k positions
- got all the summarization of F
- evaluate all the sum values and got its biggest value
codes like following (there are flaws in here.)
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
class Solution {
private:
int max_sum = INT_MIN; // in case the cur_sum
public:
vector<int> rotate_k_vector(int k, vector<int> nums) {
vector<int> ans;
// initialize ans by nums
ans = nums;
int n = ans.size();
if (n == 0) return ans;
if (k == 0) return ans;
if (k > n) k = k % n;
reverse(ans.begin(), ans.begin() + n - k);
reverse(ans.begin() + n - k, ans.end());
reverse(ans.begin(), ans.end());
return ans;
}
int maxRotateFunction(vector<int>& nums) {
int n = nums.size();
int cur_sum = 0;
for (int i = 0; i < n; i++) {
vector<int> ans = rotate_k_vector(i, nums);
for (int j = 0; j < n; j++) {
cur_sum += ans[j] * j;
}
max_sum = max(max_sum, cur_sum);
cur_sum = 0;
}
return max_sum;
}
};
int main()
{
Solution s;
vector<int> nums{
4, 3, 2, 6};
cout << s.maxRotateFunction(nums) << endl;
return 0;
}
The flaw is following:

solution_2

Intuition
F ( 0 ) = 0 × n u m s [ 0 ] + 1 × n u m s [ 1 ] + ⋯ + ( n − 1 ) × n u m s [ n − 1 ] F(0) = 0 \times nums[0] +1 \times nums[1] + \cdots + (n-1)\times nums[n-1] F(0)=0×nums[0]+1×nums[1]+⋯+(n−1)×nums[n−1]
F ( 1 ) = 1 × n u m s [ 0 ] + 2 × n u m s [ 1 ] + ⋯ + ( n % n ) × n u m s [ n − 1 ] F(1) = 1 \times nums[0] +2 \times nums[1] + \cdots + (n\%n)\times nums[n-1] F(1)=1×nums[0]+2×nums[1]+⋯+(n%n)×nums[n−1]
F ( 1 ) − F ( 0 ) = n u m s [ 0 ] + n u m s [ 1 ] + ⋯ + n u m s [ n − 2 ] − ( n − 1 ) × n u m s [ n − 1 ] F(1) - F(0) = nums[0] +nums[1] + \cdots + nums[n-2] - (n-1)\times nums[n-1] F(1)−F(0)=nums[0]+nums[1]+⋯+nums[n−2]−(n−1)×nums[n−1]
sort it out
F ( 1 ) − F ( 0 ) = n u m S u m − n u m s [ n − 1 ] − ( n − 1 ) × n u m s [ n − 1 ] F(1) - F(0) = numSum -nums[n-1] - (n-1)\times nums[n-1] F(1)−F(0)=numSum−nums[n−1]−(n−1)×nums[n−1]
F ( 1 ) = F ( 0 ) + n u m S u m + n × n u m s [ n − 1 ] F(1) =F(0) + numSum + n\times nums[n-1] F(1)=F(0)+numSum+n×nums[n−1]
abstract the 1 to a
F ( k ) = F ( k − 1 ) + n u m S u m + n × n u m s [ n − k ] F(k) =F(k-1) + numSum + n\times nums[n-k] F(k)=F(k−1)+numSum+n×nums[n−k]
The codes for this
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
class Solution {
public:
int maxRotateFunction(vector<int>& nums) {
int sum = 0;
int len = nums.size();
int max_sum = INT_MIN;
int f = 0;
for (int i = 0; i < len; i++) {
sum += nums[i];
f += i * nums[i];
}
max_sum = f;
for (int i = len - 1; i >= 0; i--) {
f = f + sum - len * nums[i];
max_sum = max(max_sum, f);
}
return max_sum;
}
};
int main()
{
Solution s;
vector<int> nums{
4, 3, 2, 6};
cout << s.maxRotateFunction(nums) << endl;
return 0;
}
solution_3
intuition
view the 0 , 1 , ⋯ , n − 1 0, 1, \cdots, n-1 0,1,⋯,n−1 as the transfer variable
The results( O ( n 2 ) O(n^2) O(n2)):

The codes :
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
class Solution {
public:
int maxRotateFunction(vector<int>& nums) {
int cur_sum = 0;
// set max_sum the minimum possible value
int max_sum = INT_MIN;
int n = nums.size();
int cnt = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cur_sum += nums[j] * ((j + cnt) % n);
}
max_sum = max(max_sum, cur_sum);
cur_sum = 0;
cnt++;
}
return max_sum;
}
};
int main()
{
Solution s;
vector<int> nums{
4, 3, 2, 6};
cout << s.maxRotateFunction(nums) << endl;
return 0;
}
版权声明
本文为[SUNNY_ CHANGQI]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204230717047345.html
边栏推荐
猜你喜欢

1216_MISRA_C规范学习笔记_控制流的规则要求

Transformer-XL: Attentive Language ModelsBeyond a Fixed-Length Context 论文总结

Weekly leetcode - 06 array topics 7 ~ 739 ~ 50 ~ offer 62 ~ 26 ~ 189 ~ 9

My heart's broken! A woman's circle of friends envied others for paying wages on time and was fired. Even her colleagues who liked her were fired together

clang 如何产生汇编文件

CSV column extract column extraction

5.6 综合案例-RTU-

LeetCode简单题之三除数

怎么读书读论文

Rotation function of leetcode medium problem
随机推荐
Positioning of high precision welding manipulator
剑指offer day24 数学(中等)
浅谈ES6尾调优化
Implementation of promise all
社区团购小程序源码+界面diy+附近团长+供应商+拼团+菜谱+秒杀+预售+配送+直播
sql 使用过的查询语句
输入/输出系统
Kubernetes in browser and IDE | interactive learning platform killercoda
Listed on the Shenzhen Stock Exchange: the market value is 5.2 billion yuan. Lu is the East and his daughter is American
5.6 综合案例-RTU-
[untitled]
C outputs a two-dimensional array with the following characteristics.
Talk about the basic but not simple stock data
LeetCode简单题之重新排列日志文件
nn.Module类的讲解
vslam PPT
华硕笔记本电脑重装系统后不能读取usb,不能上网
2022.4.11-4.17 AI行业周刊(第93期):AI行业的困局
常用正则表达式
NFT ecological development of Ignis public chain: unicorn Donation and development of Art