Files
leetcode-master/problems/kamacoder/0156.勇敢牛牛战斗序列.md
programmercarl 574cef48b3 Update
2024-08-29 20:39:18 +08:00

1.5 KiB

勇敢牛牛战斗序列

题目链接

贪心思路,对数组从小到大排序之后,先取最右边,再取最左边,循环反复。

#include<bits/stdc++.h>

using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> a(n); // 使用 vector 存储整数数组
    for (int i = 0; i < n; i++) {
        cin >> a[i]; // 读取数组
    }
    sort(a.begin(), a.end()); // 对数组进行排序

    long long ans = 0; // 使用 long long 存储结果,以防溢出
    int cur = 0;
    int left = 0, right = n - 1;
    while (left <= right) {
        if (cur < a[right]) {
            ans += a[right] - cur;
        }
        cur = a[left];
        right--;
        left++;
    }
    cout << ans << endl; // 输出结果
    return 0;
} 
import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
        }
        Arrays.sort(a);
        long ans = 0;
        int cur = 0;
        int left = 0, right = a.length - 1;
        while (left <= right) {
            if (cur < a[right]) {
                ans = ans + a[right] - cur;
            }
            cur = a[left];
            right--;
            left++;
        }
        System.out.println(ans);
    }
}