楼小鸡 level
获赞
0
粉丝
1
关注
1
看过 TA
1
浙江师范大学
2029
C++
IP属地:浙江
暂未填写个人简介
私信
关注
在这道题目中我遇到了几个错误1.没有考虑首尾边界的条件,所以我给首尾加了特别判定#include <bits/stdc++.h>using namespace std;const int N = 2e5 + 10;int a[N];int main(){int t = 0;cin >> t; // 测试组数while (t--){int n = 0;cin >> n;for (int i = 1; i <= n; i++)cin >> a[i]; // 存入数据,下标从1开始// 进行遍历数组,来寻找哪个适合删除,删除的这个值后,即把a[i]与a[i-1]的距离和a[i]和a[i+1]的距离之和,变成了a[i+1]-a[i-1],那么变化幅度就是这两项的绝对值,其中前两个距离之和一定是大于a[i+1]-a[i-1]的,参考绝对值不等式,但是要考虑首尾的影响// 首的情况不妨直接作为起点int best = abs(a[2] - a[1]); // 最大节省的时间,为了避免命名冲突,最大值最好用best// 开始遍历for (int i = 2; i <= n - 1; i++){int sum1 = abs(a[i] - a[i - 1]) + abs(a[i] - a[i + 1]);int sum2 = abs(a[i + 1] - a[i - 1]);if (sum1 - sum2 > best)best = sum1 - sum2;}// 尾的情况考虑best = abs(a[n] - a[n - 1]) > best ? abs(a[n] - a[n - 1]) : best;// 在这里计算距离之和int sum = 0;for (int i = 2; i <= n; i++){sum += abs(a[i] - a[i - 1]);}cout << sum - best << endl; // 距离之和减去最大优化}return 0;}
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务