【秋招笔试题】合并最小值 DP

news2024/11/16 21:01:44

题面
在这里插入图片描述
在这里插入图片描述
解法:与leetcode321不一样的是,那个是最大值,这个是最小值,且需要处理0首位问题。那道题是Hard题中的Hard,无论是思维量还是代码量都是顶级,这道题难度并不弱于那道。
观察到数据量为500级别,可以考虑N^3的解法。那么显然便是动态规划。定义数组dp[i][j][k]为第一个数组枚举到i,第二个数组枚举到j,总共选了k个的最小答案。注意由于是数组对比大小,需要自定义比较函数。

import java.util.*;

public class Solution {
    public int[] minNumber(int[] nums1, int[] nums2, int k) {
        int m = nums1.length, n = nums2.length;
        String[][][] dp = new String[m + 1][n + 1][k + 1];
        for (int i = 0; i <= m; ++i) {
            for (int j = 0; j <= n; ++j) {
                for (int l = 0; l <= k; ++l) {
                    dp[i][j][l] = "";
                }
            }
        }

        dp[1][0][1] = Integer.toString(nums1[0]);
        dp[0][1][1] = Integer.toString(nums2[0]);

        for (int i = 2; i <= m; ++i) {
            dp[i][0][1] = min(dp[i-1][0][1], Integer.toString(nums1[i-1]));
        }

        for (int j = 2; j <= n; ++j) {
            dp[0][j][1] = min(dp[0][j-1][1], Integer.toString(nums2[j-1]));
        }

        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                dp[i][j][1] = min(dp[i-1][j-1][1], min(Integer.toString(nums1[i-1]), Integer.toString(nums2[j-1])));
            }
        }

        for (int l = 2; l <= k; ++l) {
            for (int i = 0; i <= m; ++i) {
                for (int j = Math.max(l - i, 0); j <= n; ++j) {
                    dp[i][j][l] = String.join("", Collections.nCopies(l, "9"));
                    if (i > 0 && !dp[i-1][j][l].isEmpty()) {
                        dp[i][j][l] = min(dp[i][j][l], dp[i-1][j][l]);
                    }
                    if (j > 0 && !dp[i][j-1][l].isEmpty()) {
                        dp[i][j][l] = min(dp[i][j][l], dp[i][j-1][l]);
                    }
                    if (j > 0 && !dp[i][j-1][l-1].isEmpty()) {
                        dp[i][j][l] = min(dp[i][j][l], dp[i][j-1][l-1] + Integer.toString(nums2[j-1]));
                    }
                    if (i > 0 && !dp[i-1][j][l-1].isEmpty()) {
                        dp[i][j][l] = min(dp[i][j][l], dp[i-1][j][l-1] + Integer.toString(nums1[i-1]));
                    }
                }
            }
        }

        int[] ret = new int[k];
        for (int i = 0; i < k; ++i) {
            ret[i] = dp[m][n][k].charAt(i) - '0';
        }

        return ret;
    }

    private String min(String a, String b) {
        if(a.length() == 0) return a;
        if(b.length() == 0) return b;
        if(a.charAt(0) == '0') a = String.join("", Collections.nCopies(500, "9"));
        if(b.charAt(0) == '0') b = String.join("", Collections.nCopies(500, "9"));
        return a.compareTo(b) < 0 ? a : b;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2053976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DVWA-IDS 特殊版本测试

起因 浏览DVWA历史更新记录发现有版本带有IDS插件&#xff0c;可以用于平时没有相关设备等场景演示用&#xff0c;所以开启本次测试。 下载 官方最新版本是移除了IDS插件&#xff0c;原因是“从不使用”&#xff0c;所以需要下载移除该插件之前的版本。 https://github.com/…

【vue教程】六. Vue 的状态管理

目录 往期列表本章涵盖知识点回顾Vuex 的基本概念什么是 Vuex&#xff1f;为什么需要 Vuex&#xff1f; Vuex 的核心概念stategettersmutationsactionsmodules Vuex 的安装和基本使用安装 Vuex创建 store在 Vue 应用中使用 store在组件中访问和修改状态 Vuex 的模块化模块化的好…

PWN练习---Stack_2

目录 srop源码分析exp putsorsys源码分析exp ret2csu_1源码分析exp traveler源码分析exp srop 题源&#xff1a;[NewStarCTF 2023 公开赛道]srop 考点&#xff1a;SROP 栈迁移 源码 首先从bss段利用 syscall 调用 write 读出数据信息&#xff0c;然后调用 syscall-read向栈中…

回归预测|基于鲸鱼优化支持向量机结合Adaboost集成的数据回归预测Matlab程序 多特征输入单输出 效果非常不错!WOA-SVM-Adaboost

回归预测|基于鲸鱼优化支持向量机结合Adaboost集成的数据回归预测Matlab程序 多特征输入单输出 效果非常不错&#xff01;WOA-SVM-Adaboost 文章目录 前言回归预测|基于鲸鱼优化支持向量机结合Adaboost集成的数据回归预测Matlab程序 多特征输入单输出 效果非常不错&#xff01;…

Wallpaper-将动态壁纸永久设置为静态

可以在设置里找到横排性能选项点击之后里面有个回放&#xff0c;回放中有个应用程序规则点击设置-创建新规则&#xff0c;当explorer.exe(好像是微软的文件浏览&#xff1f;)条件为运行中&#xff0c;回放选择暂停即可 然后确定即可。

轻松上手:10款热门产品管理系统推荐

文章介绍了以下几个工具&#xff1a;PingCode、Worktile、Teambition、明道云、用友云、Tapd、禅道、Figma、Amplitude、Asana 。 在寻找合适的产品管理系统时&#xff0c;你是否感到市场上的选择令人眼花缭乱&#xff0c;不知从何选择&#xff1f;一个好的产品管理系统可以极大…

推荐4款让文字创作更轻松的AI 写作助手 !

目前很多的AI 技术已经渗透到了我们生活的各个领域&#xff0c;包括写作。ai写作工具的出现&#xff0c;为那些有写作困难或者需求的人们提供了很大的帮助&#xff0c;成为了我们的一大得力助手。今天&#xff0c;就给大家推荐几款比较热门的AI写作工具。 1、笔灵AI写作助手 直…

Java面向接口编程(例题+知识点)

题目&#xff1a; 采用面向接口编程思想组装一台计算机 计算机的主要组成部分 CPU 硬盘 内存 代码解析&#xff1a; 1.参数类型为 CPU 是因为它是一个接口。接口类型参数的主要好处是它使方法具有更好的灵活性和可扩展性。你可以传入任何实现了 CPU 接口的类的实例。 2.使用…

博达网站群管理平台 v6.0使用相关问题解决

1 介绍 最近受人所托&#xff0c;需要用博达网站群管理平台创建一个网站。该平台的内部版本为9.8.2。作为一个能直接从代码创建网站系统的人&#xff0c;初次使用本平台&#xff0c;刚开始感觉摸不着头脑。因为该平台存在的目的&#xff0c;就是让不懂代码的人能快速创建网站&…

记录xserver做域名,腾讯云做服务器的域名解析流程

以下为个人理解&#xff0c;请多指教 主域名 1.在Xserver买好域名后&#xff0c;会要求需要购买它们的服务器&#xff0c;因为server域名与server服务器是绑定关系 2.在腾讯云的“云解析DNS”添加域名&#xff0c;为自己购买的主域名abc.com 3.解析并生效 一般为www&#xff…

TransRepair

TransRepair: Context-aware Program Repair for Compilation Errors 基本信息 ASE 22: 37th IEEE/ACM International Conference on Automated Software Engineering 博客贡献人 页禾七 作者 Xueyang Li&#xff0c;Shangqing Liu&#xff0c;Ruitao Feng&#xff0c;Gu…

qt-17不规则窗体

不规则窗体 知识点shape.hshape.cppmain.cpp运行图 知识点 感觉这个就是在图片背景 贴了白色 shape.h #ifndef SHAPE_H #define SHAPE_H#include <QWidget>class Shape : public QWidget {Q_OBJECTpublic:Shape(QWidget *parent nullptr);~Shape(); protected:void m…

【开源社区】Elasticsearch(ES)中 exists 查询空值字段的坑

文章目录 1、概述2、使用 null_value 处理空值3、使用 exists 函数查询值为空的文档3.1 使用场景3.2 ES 中常见的空值查询方式3.3 常见误区3.4 使用 bool 查询函数查询空值字段3.5 exists 函数详解3.5.1 bool 查询的不足3.5.3 exists 的基本使用 3.6 完美方案 1、概述 本文主要…

环网交换机 环网数采仪 环网采集器确保数据传输无懈可击!

计讯物联Pro级双向防护&#xff0c;升级环网采集器确保数据传输无懈可击&#xff01; 在物联网(IoT)的世界里&#xff0c;数据流动如同城市交通&#xff0c;需要高效且可靠的网络来支撑。但就像城市交通可能遇到意外拥堵或道路封闭&#xff0c;传统网络在数据传输上也会遇到障…

Redis RDB三两事

rdb&#xff1a;将数据库的快照以二进制格式保存在文件中&#xff0c;redis重启后直接加载数据。可以通过save和bgsave命令生成rdb。当然我们可以在生成rdb文件时指定规则&#xff0c;例如 save 60 1000 如果60秒内不少于1000个key发生了改动&#xff0c;则生成一个新的rdb文件…

苹果电脑能玩Steam游戏吗?Steam对苹果笔记本要求高吗 steam苹果下载安装教程

对于游戏爱好者而言&#xff0c;如何在Mac上安装并使用Steam玩游戏成为一个重要的问题&#xff0c;Steam作为全球最大的数字发行平台和游戏社区&#xff0c;为玩家提供了丰富的游戏资源和社交交流平台。然而&#xff0c;由于Mac和Windows系统之间存在差异&#xff0c;很多人不确…

Linux进程间通信方式对比

参考&#xff1a; Linux进程间通信总结-百度开发者中心 Linux操作系统提供了多种进程间通信&#xff08;IPC&#xff09;的方式&#xff0c;每种方式都有其独特的应用场景和优缺点。下面将对Linux下的进程间通信方式进行总结和比较。 管道&#xff08;Pipe&#xff09; 管道是最…

小白学大模型:GLM 调用教程

最近这一两周看到不少互联网公司都已经开始秋招提前批面试了。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些…

计算机网络:DNS、子网掩码、网关

参考&#xff1a; https://blog.csdn.net/weixin_55255438/article/details/123074896 https://zhuanlan.zhihu.com/p/65226634 在计算机网络中&#xff0c;DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;、子网掩码&#xff08;Subnet Mask&#xff09;…

优化RoBERTa:在AMD上使用混合精度进行微调

Optimizing RoBERTa: Fine-Tuning with Mixed Precision on AMD — ROCm Blogs 简介 在这篇博客中&#xff0c;我们将探讨如何微调鲁棒优化的BERT预训练方法&#xff08;[RoBERTa](https://arxiv.org/abs/1907.11692)&#xff09;大型语言模型&#xff0c;重点在于PyTorch的混…