数组的子集不能累加出的最小正数

简介: 题目二题解先把array排序,正数数组排完序,左边0位置肯定是1定义变量range =1,表示从1~ 1范围上的正数都能累加出来range=k,代表1~k上的所有正数都能搞出来当arr 0位置是1的情况下,range=1,代表1~ 1范围的正数都可以搞出来如果1位置也是1, range变成2,代表1 ~2范围的正数都可以搞出来如果2位置也是2, range变成4,代表1 ~4范围的正数都可以搞出来

文章目录

前言

问题一解决思路

题目二题解

前言

给定一个正数数组arr,

返回arr的子集不能累加出的最小正数

1)正常怎么做?

2)如果arr中肯定有1这个值,怎么做?


问题一解决思路



arr所有值的累加和从一个负数到一个整数做出一张表,然后看最后一行

arr 0~N-1最后一行的值能不能搞定1, 2, 3…哪一个最早不行的,返回就是答案


public static int unformedSum2(int[] arr) {

 if (arr == null || arr.length == 0) {

  return 1;

 }

 int sum = 0;

 int min = Integer.MAX_VALUE;

 for (int i = 0; i != arr.length; i++) {

  sum += arr[i];

  min = Math.min(min, arr[i]);

 }

 // boolean[][] dp ...

 int N = arr.length;

 boolean[][] dp = new boolean[N][sum + 1];

 for (int i = 0; i < N; i++) {// arr[0..i] 0

  dp[i][0] = true;

 }

 dp[0][arr[0]] = true;

 for (int i = 1; i < N; i++) {

  for (int j = 1; j <= sum; j++) {

   dp[i][j] = dp[i - 1][j] || ((j - arr[i] >= 0) ? dp[i - 1][j - arr[i]] : false);

  }

 }

 for (int j = min; j <= sum; j++) {

  if (!dp[N - 1][j]) {

   return j;

  }

 }

 return sum + 1;

}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

题目二题解

先把array排序,正数数组排完序,左边0位置肯定是1

定义变量range =1,表示从1~ 1范围上的正数都能累加出来

range=k,代表1~k上的所有正数都能搞出来


当arr 0位置是1的情况下,range=1,代表1~ 1范围的正数都可以搞出来

如果1位置也是1, range变成2,代表1 ~2范围的正数都可以搞出来


如果2位置也是2, range变成4,代表1 ~4范围的正数都可以搞出来



如果0~ i-1是0~100, range=100

i位置17,可以让range扩充到117


如果0~ i-1能搞定的数是1~100,此时i位置是102,那么101不可以搞定


如果0~ i搞定1~a,如果位置上是b:

1如果b<=a+1,能扩充范围到1~a+b

2咖如果b> a+1. a+1就是搞定不了的最小正整数


public static int unformedSum3(int[] arr) {

 if (arr == null || arr.length == 0) {

  return 0;

 }

 Arrays.sort(arr); // O (N * logN)

 int range = 1;

 // arr[0] == 1

 for (int i = 1; i != arr.length; i++) {

  if (arr[i] > range + 1) {

   return range + 1;

  } else {

   range += arr[i];

  }

 }

 return range + 1;

}


目录
相关文章
|
10月前
|
人工智能 数据可视化 数据处理
【2025低代码前瞻】:平台赋能的无限可能
低代码平台正成为企业数字化转型的核心工具,2025年将通过可视化开发、核心引擎升级、模型驱动、数据处理增强、AI融合、插件生态丰富、开放架构和强化企业功能等趋势,大幅提升开发效率与灵活性。可视化开发实现全员参与,拖拽式组件、实时预览和多人协作等功能显著提高开发速度;核心引擎如SQL引擎、功能引擎等的智能化升级支持高效开发;模型驱动自动生成高质量代码,智能优化逻辑并确保跨平台兼容;数据处理能力增强,支持跨数据库操作与实时流处理;丰富的插件生态覆盖多行业需求;开放架构结合微服务与开源框架提升扩展性;低代码平台将在2025年为企业带来更高效率、更低成本和更强创新能力。
430 32
|
10月前
|
存储 弹性计算 运维
保障业务连续性,企业灾备建设新思路
本次分享主题为“保障业务连续性,企业灾备建设新思路”,由阿里云专家李媛和胡航丽主讲。内容涵盖企业业务连续性与灾备建设的重要性、新产品及其界面特点、Regional ESID、云备份Call back up、跨账号备份等。重点介绍了数据灾备中心BDRC,其具备全面覆盖阿里云资源、可视化设计、简化运维等特点,帮助企业高效实现数据灾备及合规管理。同时,针对企业面临的灾备挑战,如勒索病毒攻击、数据误删等,提供了不可变备份、自动病毒检测等功能,确保数据安全性和业务连续性。最后,通过案例展示了如何通过云备份服务满足企业的高阶需求,降低运维成本并提高效率。
289 13
|
11月前
|
机器学习/深度学习 人工智能 搜索推荐
AI技术在医疗领域的应用与前景
本文探讨了人工智能(AI)技术在医疗领域的应用,包括疾病诊断、治疗方案制定、药物研发等方面。通过对现有研究成果的梳理,分析了AI技术在提高医疗服务效率、降低医疗成本、改善患者体验等方面的潜力。同时,也指出了AI技术在医疗领域面临的挑战,如数据隐私保护、伦理道德问题等,并展望了未来的发展趋势。
941 2
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
1477 4
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之错误提示“ODPS-0130161: Parse exception - invalid token 'WITH', expect 'SEMICOLON'”,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
1346 0
|
算法 关系型数据库 Java
数据库原理第四章课后题答案(第四版)
数据库原理第四章课后题答案(第四版)
571 0
|
运维 监控 数据库
在OceanBase数据库中,obd集群版本需在线升级4.3.1.0升级至4.3.2
【8月更文挑战第14天】在OceanBase数据库中,obd集群版本需在线升级4.3.1.0升级至4.3.2
282 0
|
存储 缓存 移动开发
日常小知识点之用户层网络缓冲区(固定内存,ringbuffer,chainbuffer)
日常小知识点之用户层网络缓冲区(固定内存,ringbuffer,chainbuffer)
352 0
|
Cloud Native 测试技术 Go
服务器迁移:无缝过渡指南
服务器迁移:无缝过渡指南
596 0