Skip to content

Commit caafbda

Browse files
committed
feat: add solutions to lc problem: No.0396
No.0396.Rotate Function
1 parent 3d26098 commit caafbda

File tree

6 files changed

+203
-2
lines changed

6 files changed

+203
-2
lines changed

solution/0300-0399/0396.Rotate Function/README.md

+76-1
Original file line numberDiff line numberDiff line change
@@ -54,22 +54,97 @@ F(3) = (0 * 3) + (1 * 2) + (2 * 6) + (3 * 4) = 0 + 2 + 12 + 12 = 26
5454

5555
<!-- 这里可写通用的实现逻辑 -->
5656

57+
```
58+
f(0) = 0 * nums[0] + 1 * nums[1] + ... + (n - 1) * nums[n - 1]
59+
f(1) = 1 * nums[0] + 2 * nums[1] + ... + 0 * nums[n - 1]
60+
...
61+
f(k) = f(k - 1) + s - n * nums[n - k]
62+
```
63+
64+
5765
<!-- tabs:start -->
5866

5967
### **Python3**
6068

6169
<!-- 这里可写当前语言的特殊实现逻辑 -->
6270

6371
```python
64-
72+
class Solution:
73+
def maxRotateFunction(self, nums: List[int]) -> int:
74+
f = sum(i * v for i, v in enumerate(nums))
75+
n, s = len(nums), sum(nums)
76+
ans = f
77+
for i in range(1, n):
78+
f = f + s - n * nums[n - i]
79+
ans = max(ans, f)
80+
return ans
6581
```
6682

6783
### **Java**
6884

6985
<!-- 这里可写当前语言的特殊实现逻辑 -->
7086

7187
```java
88+
class Solution {
89+
public int maxRotateFunction(int[] nums) {
90+
int f = 0;
91+
int s = 0;
92+
int n = nums.length;
93+
for (int i = 0; i < n; ++i) {
94+
f += i * nums[i];
95+
s += nums[i];
96+
}
97+
int ans = f;
98+
for (int i = 1; i < n; ++i) {
99+
f = f + s - n * nums[n - i];
100+
ans = Math.max(ans, f);
101+
}
102+
return ans;
103+
}
104+
}
105+
```
106+
107+
### **C++**
108+
109+
```cpp
110+
class Solution {
111+
public:
112+
int maxRotateFunction(vector<int>& nums) {
113+
int f = 0, s = 0, n = nums.size();
114+
for (int i = 0; i < n; ++i)
115+
{
116+
f += i * nums[i];
117+
s += nums[i];
118+
}
119+
int ans = f;
120+
for (int i = 1; i < n; ++i)
121+
{
122+
f = f + s - n * nums[n - i];
123+
ans = max(ans, f);
124+
}
125+
return ans;
126+
}
127+
};
128+
```
72129
130+
### **Go**
131+
132+
```go
133+
func maxRotateFunction(nums []int) int {
134+
f, s, n := 0, 0, len(nums)
135+
for i, v := range nums {
136+
f += i * v
137+
s += v
138+
}
139+
ans := f
140+
for i := 1; i < n; i++ {
141+
f = f + s - n*nums[n-i]
142+
if ans < f {
143+
ans = f
144+
}
145+
}
146+
return ans
147+
}
73148
```
74149

75150
### **...**

solution/0300-0399/0396.Rotate Function/README_EN.md

+68-1
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,80 @@ So the maximum value of F(0), F(1), F(2), F(3) is F(3) = 26.
5353
### **Python3**
5454

5555
```python
56-
56+
class Solution:
57+
def maxRotateFunction(self, nums: List[int]) -> int:
58+
f = sum(i * v for i, v in enumerate(nums))
59+
n, s = len(nums), sum(nums)
60+
ans = f
61+
for i in range(1, n):
62+
f = f + s - n * nums[n - i]
63+
ans = max(ans, f)
64+
return ans
5765
```
5866

5967
### **Java**
6068

6169
```java
70+
class Solution {
71+
public int maxRotateFunction(int[] nums) {
72+
int f = 0;
73+
int s = 0;
74+
int n = nums.length;
75+
for (int i = 0; i < n; ++i) {
76+
f += i * nums[i];
77+
s += nums[i];
78+
}
79+
int ans = f;
80+
for (int i = 1; i < n; ++i) {
81+
f = f + s - n * nums[n - i];
82+
ans = Math.max(ans, f);
83+
}
84+
return ans;
85+
}
86+
}
87+
```
88+
89+
### **C++**
90+
91+
```cpp
92+
class Solution {
93+
public:
94+
int maxRotateFunction(vector<int>& nums) {
95+
int f = 0, s = 0, n = nums.size();
96+
for (int i = 0; i < n; ++i)
97+
{
98+
f += i * nums[i];
99+
s += nums[i];
100+
}
101+
int ans = f;
102+
for (int i = 1; i < n; ++i)
103+
{
104+
f = f + s - n * nums[n - i];
105+
ans = max(ans, f);
106+
}
107+
return ans;
108+
}
109+
};
110+
```
62111
112+
### **Go**
113+
114+
```go
115+
func maxRotateFunction(nums []int) int {
116+
f, s, n := 0, 0, len(nums)
117+
for i, v := range nums {
118+
f += i * v
119+
s += v
120+
}
121+
ans := f
122+
for i := 1; i < n; i++ {
123+
f = f + s - n*nums[n-i]
124+
if ans < f {
125+
ans = f
126+
}
127+
}
128+
return ans
129+
}
63130
```
64131

65132
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public:
3+
int maxRotateFunction(vector<int>& nums) {
4+
int f = 0, s = 0, n = nums.size();
5+
for (int i = 0; i < n; ++i)
6+
{
7+
f += i * nums[i];
8+
s += nums[i];
9+
}
10+
int ans = f;
11+
for (int i = 1; i < n; ++i)
12+
{
13+
f = f + s - n * nums[n - i];
14+
ans = max(ans, f);
15+
}
16+
return ans;
17+
}
18+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
func maxRotateFunction(nums []int) int {
2+
f, s, n := 0, 0, len(nums)
3+
for i, v := range nums {
4+
f += i * v
5+
s += v
6+
}
7+
ans := f
8+
for i := 1; i < n; i++ {
9+
f = f + s - n*nums[n-i]
10+
if ans < f {
11+
ans = f
12+
}
13+
}
14+
return ans
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public int maxRotateFunction(int[] nums) {
3+
int f = 0;
4+
int s = 0;
5+
int n = nums.length;
6+
for (int i = 0; i < n; ++i) {
7+
f += i * nums[i];
8+
s += nums[i];
9+
}
10+
int ans = f;
11+
for (int i = 1; i < n; ++i) {
12+
f = f + s - n * nums[n - i];
13+
ans = Math.max(ans, f);
14+
}
15+
return ans;
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def maxRotateFunction(self, nums: List[int]) -> int:
3+
f = sum(i * v for i, v in enumerate(nums))
4+
n, s = len(nums), sum(nums)
5+
ans = f
6+
for i in range(1, n):
7+
f = f + s - n * nums[n - i]
8+
ans = max(ans, f)
9+
return ans

0 commit comments

Comments
 (0)