先贴个题目:
以及题目链接:1240. 完全二叉树的权值 - AcWing题库https://www.acwing.com/problem/content/1242/
双指针算法题,甚至感觉不需要双指针()
我们发现每一层,x的其实坐标就是2的x-1次方到2的x次方-1,所以直接确定每一层的起点和终点遍历判断即可,代码如下:
#include <iostream>
#include <cmath>
typedef long long ll;
using namespace std;
const int N = 1e6;
int list[N];
int main()
{
int n;
cin >> n;
for (int i = 1; i < n + 1; ++i)
scanf("%d", &list[i]);
ll Max = list[1], ans = 1;
for (int i = 0, j = 0; j <= n; ++i)
{
ll sum = 0;
ll x = pow(2, i);
for (int k = 1; k <= x; ++k)
sum += list[++j];
if (sum > Max)
{
Max = sum;
ans = i + 1;
}
}
cout << ans;
return 0;
}
by————2024.4.6刷题记录