专栏名称: 算法与数据结构
算法与数据结构知识、资源分享
目录
相关文章推荐
51好读  ›  专栏  ›  算法与数据结构

顺丰秋招算法面试真题解析

算法与数据结构  · 公众号  · 算法  · 2024-09-26 10:10

主要观点总结

本文包含两道题目,分别是关于小明移动算珠和巧克力板的问题。第一个问题要求找出在最多k次移动操作后能得到的最小字典序数组。第二个问题则是帮助小丽找出尽可能小的周长,使得她带上的巧克力板都是边长为整数的正方形。

关键观点总结

关键观点1: 小明移动算珠问题关键点

理解题目中的移动操作与字典序的关系;掌握将k次操作集中于最后一个元素以获取最小字典序数组的策略。

关键观点2: 巧克力板问题关键点

理解如何将总面积n表示为若干数字的平方和;采用贪心策略,优先使用较大的ai值以最小化周长。


正文

请到「今天看啥」查看全文


k 次后最小字典序数组。

示例

输入

4 2
1 2 2 4

输出

0 1 2 6

解题思路

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

代码

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();
    }
}

巧克力

题目描述

小丽明天要出去和同学春游。她准备带上总面积恰好为 n 的巧克力板(简化起见将巧克力板视为平面图形,忽略它的厚度,只考虑面积)去和同学们一起分享。

出于美感的考虑,小丽希望她带上的巧克力板都是边长为整数的正方形;另一方面出于便携性考虑,小丽希望这些巧克力板的周长之和尽可能小,请你帮小丽找出可能的最小周长!

换句话说,小丽需要你帮忙找出 k 个小正方形巧克力板,边长分别为 a1, a2, ..., ak ,使得其面积之和,即







请到「今天看啥」查看全文