恢复数字序列 华为题 Java解法
时间: 2023-08-01 20:13:24 浏览: 68
以下是一个可能的 Java 解法:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
int[] res = restoreSequence(arr);
for (int i = 0; i < res.length; i++) {
System.out.print(res[i] + " ");
}
}
public static int[] restoreSequence(int[] arr) {
int n = arr.length;
int[] res = new int[n];
for (int i = 0; i < n; i++) {
res[i] = arr[i] * (n - i);
if (i > 0) {
res[i] -= arr[i - 1] * (n - i + 1);
}
}
for (int i = n - 2; i >= 0; i--) {
res[i] -= res[i + 1];
}
return res;
}
}
```
该解法的思路是,首先根据题意,对于原序列中的第 i 个数,它在恢复后会被乘以 (n-i),然后减去前面所有未恢复的数的和。因此,我们可以先遍历一遍原序列,计算出每个数恢复后对答案的贡献,保存在一个新的数组 res 中。
接下来,我们需要对 res 数组进行调整,使得它满足恢复后的序列的要求。具体来说,我们从后往前遍历 res 数组,对于每个位置 i,我们将 res[i] 减去 res[i+1],这样就可以消除后面元素的影响,得到最终的恢复序列。
最后,我们将恢复序列存放在 res 数组中返回即可。
相关推荐
![html](https://img-home.csdnimg.cn/images/20210720083451.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)