返回

拿捏算法刷题之旅,从简单题起步!

后端

在算法学习的旅途中,我们总是从简单题开始,一步步提升自己的解题能力。牛客试题广场提供了许多适合算法入门的题目,今天我们就来尝试两道入门级题目,分别是「计算日期到天数转换」和「幸运的袋子」。

「计算日期到天数转换」题:
从公元1970年1月1日开始算起,给定一个日期,求出从1970年1月1日到该日期的天数。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateToDays {

    public static void main(String[] args) throws ParseException {
        // 给定日期字符串
        String dateStr = "2023-03-08";
        // 设置日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 将日期字符串解析成日期对象
        Date date = sdf.parse(dateStr);
        // 获取自1970年1月1日以来的天数
        long days = date.getTime() / (1000 * 60 * 60 * 24);
        // 输出结果
        System.out.println("从1970年1月1日到" + dateStr + "的天数:" + days);
    }
}

「幸运的袋子」题:
有n个袋子,每个袋子装有若干个物品,每个物品都有一个价值。现在允许你选择k个袋子,并把这些袋子里的所有物品都拿走。求在所有可能的方案中,你最多能拿走多少价值的物品。

import java.util.Scanner;

public class LuckyBag {

    public static void main(String[] args) {
        // 输入袋子个数和物品总价值
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        int[] values = new int[n];
        for (int i = 0; i < n; i++) {
            values[i] = scanner.nextInt();
        }
        // 计算最多能拿走的价值
        int max = 0;
        for (int i = 0; i < (1 << n); i++) {
            int sum = 0;
            int count = 0;
            for (int j = 0; j < n; j++) {
                if ((i & (1 << j)) > 0) {
                    sum += values[j];
                    count++;
                }
            }
            if (count == k && sum > max) {
                max = sum;
            }
        }
        // 输出结果
        System.out.println("最多能拿走的价值:" + max);
    }
}

这两道题都是算法入门的好选择,难度适中,解法清晰。希望通过这两道题,你能感受到算法刷题的乐趣,并为之后的刷题之路做好准备。

刷题的路上,难免会遇到困难和瓶颈,但只要坚持不懈,你终将突破自我,成为算法高手!