当前位置: 首页 > news >正文

华为OD机试 - 等和子数组最小和 - 深度优先搜索(Java 2022 Q4 100分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

给定一个数组nums,将元素分为若干个组,使得每组和相等,求出满足条件的所有分组中,组内元素和的最小值。

二、输入描述

第一行输入 m

接着输入m个数,表示此数组nums

数据范围:1<=m<=50, 1<=nums[i]<=50

三、输出描述

最小拆分数组和。

四、解题思路

虽然题意很简单,看着很简单,其实这道题是有点难度的,100分你能抽到这道题,自求多福吧,兄弟。

比如:

4 3 2 3 5 2 1

可以组合成

4 1
3 2
3 2
5

解题思路:

1、答案一定在最大值与所有数的和之间,拿到这个值看是否能够满足条件;

2、用深度优先搜索,搜索一种方法满足子数组合能够满足target值的解;

3、每次从上一次找的数后面的数开始递归,这个优化非常重要,不加的话会把之前的结果再找一遍,例如,我本次递归取了第2个数,然后下面再取第5个数,当我下次递归取了第5个数的时候,如果不从第5个数之后来选,就会搜到上面一样取到第二个数,那里的结果我们之前是已经搜索过了的。

五、Java算法源码

package com.guor.od;import java.util.Scanner;
import java.util.*;public class OdTest05 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int m = Integer.valueOf(sc.nextLine());int[] nums = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();Arrays.sort(nums);// 求和int sum = 0;for (int i = 0; i < nums.length; i++) {sum += nums[i];}// 答案一定在最大值与所有数的和之间,拿到这个值看是否能够满足条件for (int ans = nums[nums.length - 1]; ans <= sum; ans++) {if (dfs(ans, 0, nums, new HashSet<>(), 0)) {System.out.println(ans);break;}}}/*** 用深度优先搜索,搜索一种方法满足子数组合能够满足target值的解** @param target   目标值* @param nowValue 当前递归中的数组和* @param nums     数组* @param useIndex 数组中已经使用过的数的下标* @param nowIndex 上一个取的数下标,用于搜索剪枝* @return 是否找到了答案*/public static boolean dfs(int target, int nowValue, int[] nums, Set<Integer> useIndex, int nowIndex) {if (useIndex.size() == nums.length && nowValue == 0) {//只有当数组中的值已经用完,且没有剩下数的时候,说明答案已经找到了return true;}//每次从上一次找的数后面的数开始递归,这个优化非常重要,不加的话会把之前的结果再找一遍,//例如,我本次递归取了第2个数,然后下面再取第5个数,//当我下次递归取了第5个数的时候,如果不从第5个数之后来选,就会搜到上面一样取到第二个数,那里的结果我们之前是已经搜索过了的for (int i = nowIndex; i < nums.length; i++) {if (useIndex.contains(i)) {//表示这个数已经被用过了continue;}//只有当当前取的数 + 当前的和小于目标值时才可以取if (nowValue + nums[i] <= target) {//标记这个数已经用过了useIndex.add(i);if (nowValue + nums[i] == target) {//当前的和已经等于目标值,这个时候我们要从头来找一个没有用过的数来继续搜索if (dfs(target, 0, nums, useIndex, 0)) {return true;}} else {//当前的和小于目标值,我们还得继续找数来继续填充我们的和if (dfs(target, nowValue + nums[i], nums, useIndex, i)) {return true;}}useIndex.remove(i);}}return false;}
}

六、效果展示

1、输入

4 6 5 5 8 2 3 3 3 1

2、输出

8
在这里插入图片描述


🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

相关文章:

华为OD机试 - 等和子数组最小和 - 深度优先搜索(Java 2022 Q4 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》…...

浏览器会因为什么样的脚本而崩溃

浏览器可能因为以下几种情况而崩溃&#xff1a; 无限循环&#xff1a;如果JavaScript脚本包含一个无限循环&#xff0c;浏览器将无法停止脚本的执行&#xff0c;导致浏览器不响应甚至崩溃。例如&#xff0c;以下代码会导致无限循环&#xff1a; while (true) {// 无限循环 } 内…...

生成与调用C++动态链接库(so文件)

文章目录 前言生成C动态链接库步骤1&#xff1a;编写C源码步骤2&#xff1a;生成共享库步骤3&#xff1a;验证生成的SO文件 调用C动态链接库步骤1&#xff1a;修改原来makefile步骤2&#xff1a;编译调用程序步骤3&#xff1a;运行调用程序 总结 前言 动态链接库是代码重用和模…...

韶音的耳机怎么样,韶音骨传导耳机值得入手吗

韶音关于骨传导耳机的产品在质量方面还是有着不错的表现&#xff0c;其最具代表性的骨传导耳机就是韶音OpenRun Pro&#xff0c;在国产骨传导耳机中是具备了一定的知名度&#xff0c;有着自主研发的声学技术。 最突出的点就在于颜色上多样化&#xff0c;有着经典的黑色&#xf…...

STM32G030F6 (SOP-20)Cortex ® -M0+, 32KB Flash, 8KB RAM, 17 GPIOs

淘宝淘了一批 STM32G030F6P6 SOP20&#xff0e;先备注一下, 还没想到能干嘛用&#xff0e; 手上的 STM32F103C6T6还剩一些&#xff0e; 一堆 “淘宝原厂STM32F103C8T6”, 还烫着手. 理解信息: ( 逐步补充 ) System Clock GPIOs GPIOs 17 PA[7:0] : 8bits USART Timer ADC I2…...

常用的字符集和字符编码

基础概念 字符 字符是各种文字和符号的总称&#xff0c;包括各国家文字、标点符号、图形符号、数字等 字符集 一个操作系统支持的字符的集合。 字符编码和解码 将每个字符都设置一个唯一编号&#xff0c;编码就是将字符集中的字符编号以一定形式转化为字节存储下来&#xff0c…...

容器技术简介

引言 随着云计算、大数据、人工智能等技术的不断发展&#xff0c;容器技术作为一种新兴的虚拟化技术&#xff0c;正逐渐成为IT领域的热点。容器技术可以帮助开发者更好地管理、部署和扩展应用程序&#xff0c;提高开发效率和应用程序的可靠性。本文将深入探讨容器技术的概念、…...

数据分享|R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据...

全文链接:http://tecdat.cn/?p22813 本教程为读者提供了使用频率学派的广义线性模型&#xff08;GLM&#xff09;的基本介绍。具体来说&#xff0c;本教程重点介绍逻辑回归在二元结果和计数/比例结果情况下的使用&#xff0c;以及模型评估的方法&#xff08;点击文末“阅读原文…...

macos 不支持svn安装

macos 10.13可能不支持svn命令,所以要安装 xcode-select --install 弹窗在线安装失败的话只能手动下载安装 打开:Sign In - Apple 搜索Command Line Tools (macOS 10.13) 下载9.4.1版本直接安装后即可...

如何通过实际操作来加深对Linux命令和概念的理解?

作为一个新手&#xff0c;你一定不要被Linux那堆命令吓到。其实&#xff0c;它们就像你的“超能力”&#xff0c;只要你掌握它们&#xff0c;你就能成为Linux世界的超级英雄&#xff01; 首先&#xff0c;我们要了解的是&#xff0c;Linux命令其实就像你的“魔法咒语”&#x…...

【开发语言】C语言与Python的互操作详解

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…...

华为配置聚合vlan(Super vlan--Sub vlan)

聚合vlan&#xff0c;Aggregation vlan&#xff0c;也称Super vlan&#xff0c;可以实现用Sub vlan二层隔离广播域&#xff0c;但又将这些Sub vlan聚合使用同一IP子网和网关的情况。 这样&#xff0c;多个Sub-VLAN共享一个网关地址&#xff0c;节约了子网号、子网定向广播地址、…...

CentOS7安装时直接跳过了安装信息摘要页面的解决方法

最近在配置Hadoop虚拟机的时候&#xff0c;创建的centos7虚拟机在安装信息摘要时直接自动跳过&#xff0c;直接跳到设置用户名和密码&#xff0c;在重复多次的重新删除安装后发现了问题所在&#xff1a; 在进行到选择操作系统来源时&#xff0c;注意是否出现“该操作系统将使用…...

python基础运用例子

python基础运用例子 1、⼀⾏代码交换 a , b &#xff1a;a, b b, a2、⼀⾏代码反转列表 l[::-1]3、合并两个字典 res {**dict1, **dict2}**操作符合并两个字典for循环合并dict(a, **b) 的方式dict(a.items() b.items()) 的方式dict.update(other_dict) 的方式 4、⼀⾏代码列…...

k8s基本概念

一、什么是Kubernetes二&#xff1a;Kubernetes部署方式的演变三、为什么要用K8S四、K8S的特性五、Kubernetes 集群架构与组件5.1 Master 组件① Kube-apiserver② Kube-controller-manager③ Kube-scheduler④ AUTH 认证模块 5.2 配置存储中心5.3 Node 组件① Kubelet② Kube-…...

Python exp() 函数

描述 exp() 方法返回x的指数,ex。 语法 以下是 exp() 方法的语法: import mathmath.exp( x ) 注意&#xff1a;exp()是不能直接访问的&#xff0c;需要导入 math 模块&#xff0c;通过静态对象调用该方法。 参数 x -- 数值表达式。 返回值 返回x的指数,ex。 实例 以下展…...

Day 34 贪心算法 part03 : 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

134. 加油站 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 给定两个整数数组 gas…...

气象站的构成及功能应用

气象站是一种用于观测、记录和报告天气数据的设备。它是由数据采集系统、通讯系统、供电系统和立杆支架构成。 一、气象站的构成&#xff1a; 数据采集系统&#xff1a;用于测量气温、湿度、风速、风向、气压、降雨量、雪深等气象参数。 通讯系统&#xff1a;收集和处理传感…...

Qt中布局管理使用总结

目录 1. 五大布局 1.1 QVBoxLayout垂直布局 1.2 QHBoxLayout水平布局 1.3 QGridLayout网格布局 1.4 QFormLayout表单布局 1.5 QStackedLayout分组布局 1.6 五大布局综合应用 2. 分割窗口 3. 滚动区域 4. 停靠区域 1. 五大布局 1.1 QVBoxLayout垂直布局 #include <…...

(位运算) 剑指 Offer 15. 二进制中1的个数 ——【Leetcode每日一题】

❓ 剑指 Offer 15. 二进制中1的个数 难度&#xff1a;简单 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 ‘1’ 的个数&#xff08;也被称为 汉明重量).&#xff09;。 提示&#xff…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...