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

简介: 题目二题解先把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;

}


目录
相关文章
|
机器学习/深度学习 人工智能 自然语言处理
对话系统简介
对话系统简介
|
11月前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
295 61
Python装饰器实战:打造高效性能计时工具
|
11月前
|
存储 弹性计算 运维
保障业务连续性,企业灾备建设新思路
本次分享主题为“保障业务连续性,企业灾备建设新思路”,由阿里云专家李媛和胡航丽主讲。内容涵盖企业业务连续性与灾备建设的重要性、新产品及其界面特点、Regional ESID、云备份Call back up、跨账号备份等。重点介绍了数据灾备中心BDRC,其具备全面覆盖阿里云资源、可视化设计、简化运维等特点,帮助企业高效实现数据灾备及合规管理。同时,针对企业面临的灾备挑战,如勒索病毒攻击、数据误删等,提供了不可变备份、自动病毒检测等功能,确保数据安全性和业务连续性。最后,通过案例展示了如何通过云备份服务满足企业的高阶需求,降低运维成本并提高效率。
345 13
|
11月前
|
存储 弹性计算 安全
阿里云服务器经济型e实例4核16G和8核32G特惠云服务器测评参考
阿里云有两款特惠云服务器——4核16G10M带宽和4核32G10M带宽,系统盘都是100G ESSD Entry,价格分别仅需70元1个月和160元1个月。那么,这两款云服务器到底性能如何?适用于哪些场景?是否值得购买?本文将全方位深入测评这两款特惠云服务器,并为您提供详细的购买建议。
|
11月前
|
存储 人工智能 数据可视化
昇腾AI行业案例(五):基于 DANet 和 Deeplabv3 模型的遥感图像分割
欢迎学习《基于 DANet 和 Deeplabv3 模型的遥感图像分割》实验。在本实验中,你将深入了解如何运用计算机视觉(CV)领域的 AI 模型,搭建一个高效精准的遥感地图区域分割系统,并利用开源数据集和昇腾 AI 芯片对模型效果加以验证。
281 0
昇腾AI行业案例(五):基于 DANet 和 Deeplabv3 模型的遥感图像分割
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
1573 4
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之错误提示“ODPS-0130161: Parse exception - invalid token 'WITH', expect 'SEMICOLON'”,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
1391 0
|
存储 机器学习/深度学习 人工智能
一文读懂ChatGPT的工作原理
【7月更文挑战第24天】.一文读懂ChatGPT的工作原理
759 2
|
运维 监控 数据库
在OceanBase数据库中,obd集群版本需在线升级4.3.1.0升级至4.3.2
【8月更文挑战第14天】在OceanBase数据库中,obd集群版本需在线升级4.3.1.0升级至4.3.2
303 0
|
存储 缓存 移动开发
日常小知识点之用户层网络缓冲区(固定内存,ringbuffer,chainbuffer)
日常小知识点之用户层网络缓冲区(固定内存,ringbuffer,chainbuffer)
394 0

热门文章

最新文章