大厂真题:【贪心】顺丰2023秋招-攀比

题目描述与示例

题目描述

小明在数学课上与同学无缘无故起了攀比心!老师们在教大家计数,每个同学有一排n个木棍,每个木棍上初始插着一些算珠,木棍从左到右依次编号为 1,2,3,...,n,其上的算珠数量也分别为 a1, a2, ..., an。小明认为,将这些算珠数是可以看作一个非负整数数组[a1, a2, a3, ..., an], 其字典序越小就越厉害。

小明可以将他的一些管珠那一下位置,即从一根木棍上取一颗算珠下来然后放到另一根木棍上(一次操作只能移动一颗算珠) 。小明想比其他人都厉害,但是他也不想太过分,他想知道如果他能进行最多 k 次移动操作,能得到的最小字典序的数组是怎样的。

注意,你不能从算珠数为0 的木棍上再取走一个算珠使得数显变成-1。每个木棍上可以插无限多个算珠。

数组x的字典序小于数组y当且仅当存在一个下标i,使得xi,且对于1 <= j < i存在xj = yj。例如:

[1,2,3] < [2,2,3]``,`` [1,2,3] < [1,2,4]

输入描述

第一行2个整数nk,表示木棍数量和小明能最多进行的移动操作次数

第二行n个整数a1, a2, ..., an,表示初始时木棍上的算珠数量。

1

输出描述

输出一行n个整数表示移动最多k次后最小字典序数组。

示例

输入

4 2
1 2 2 4

输出

0 1 2 6

解题思路

直接把k次都加到最后一个元素即可,将前面的元素尽可能地减直到k次用完。

代码

Java

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();

        int []a = new int[n + 1];

        for (int i = 1; i <= n; i++) {
            a[i] = sc.nextInt();
        }

        int tk = k;
        for (int i = 1; i <= n - 1; i++) {
            if (a[i] <= k) {
                k -= a[i];
                a[i] = 0;
            }else {
                a[i] -= k;
                break;
            }
        }
        a[n] += tk;
        for (int i = 1; i <= n; i++) {
            System.out.print(a[i] + " ");
        }
        System.out.println();
    }
}

C++

#include 
using namespace std;

int main() {
    int n, k;
    cin >> n >> k;

    vector a(n + 1);

    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    int tk = k;
    for (int i = 1; i <= n - 1; i++) {
        if (a[i] <= k) {
            k -= a[i];
            a[i] = 0;
        } else {
            a[i] -= k;
            break;
        }
    }
    a[n] += tk;
    for (int i = 1; i <= n; i++) {
        cout << a[i] << " ";
    }
    cout << endl;

    return 0;
}

华为OD算法冲刺训练
华为OD算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!

课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化

每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!

30+天陪伴式学习,20+直播课时,300+动画图解视频,200+LeetCode经典题,100+华为OD真题,还有简历修改与模拟面试将为你解锁

可查看链接 OD算法冲刺训练课程表 & OD真题汇总(持续更新)

绿色聊天软件戳 od1336了解更多

你可能感兴趣的:(算法)