2021-08-11:按要求补齐数组。给定一个已排序的正整数数组 nums,和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums 中某几个数字的和来表示。请输出满足上述要求的最少需要补充的数字个数。

福大大 答案2021-08-11:

用尽可能大的数字扩充range范围。尽可能大的数字是range+1。
时间复杂度:O(数组长度+log(n))。
空间复杂度:O(1)。

代码用golang编写。代码如下:

package main

import (
"fmt"
"math"
"sort"
) func main() {
arr := []int{1, 2, 31, 33} if true {
ret := minPatches(arr, 555)
fmt.Println(ret)
} if true {
ret := minPatches2(arr, 555)
fmt.Println(ret)
}
} // arr请保证有序,且正数 1~aim
func minPatches(arr []int, aim int) int {
patches := 0 // 缺多少个数字
range2 := 0 // 已经完成了1 ~ range的目标
sort.Slice(arr, func(i, j int) bool {
return arr[i] < arr[j]
})
for i := 0; i != len(arr); i++ {
// arr[i]
// 要求:1 ~ arr[i]-1 范围被搞定!
for arr[i]-1 > range2 { // arr[i] 1 ~ arr[i]-1
range2 += range2 + 1 // range + 1 是缺的数字
patches++
if range2 >= aim {
return patches
}
}
// 要求被满足了!
range2 += arr[i]
if range2 >= aim {
return patches
}
}
for aim >= range2+1 {
range2 += range2 + 1
patches++
}
return patches
} // 嘚瑟
func minPatches2(arr []int, K int) int {
patches := 0 // 缺多少个数字
range2 := 0 // 已经完成了1 ~ range的目标
for i := 0; i != len(arr); i++ {
// 1~range
// 1 ~ arr[i]-1
for arr[i] > range2+1 { // arr[i] 1 ~ arr[i]-1 if range2 > math.MaxInt64-range2-1 {
return patches + 1
} range2 += range2 + 1 // range + 1 是缺的数字
patches++
if range2 >= K {
return patches
}
}
if range2 > math.MaxInt64-arr[i] {
return patches
}
range2 += arr[i]
if range2 >= K {
return patches
}
}
for K >= range2+1 {
if K == range2 && K == math.MaxInt64 {
return patches
}
if range2 > math.MaxInt64-range2-1 {
return patches + 1
}
range2 += range2 + 1
patches++
}
return patches
}

执行结果如下:


左神java代码

2021-08-11:按要求补齐数组。给定一个已排序的正整数数组 nums,和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用的更多相关文章

  1. 9.11排序与查找(一)——给定两个排序后的数组A和B,当中A的末端有足够的缓冲空间容纳B。将B合并入A并排序

    /**  * 功能:给定两个排序后的数组A和B,当中A的末端有足够的缓冲空间容纳B.将B合并入A并排序. */ /** * 问题:假设将元素插入数组A的前端,就必须将原有的元素向后移动,以腾出空间. ...

  2. 18 11 05 继续补齐对python中的class不熟悉的地方 和 pygame 精灵

    ---恢复内容开始--- class game : #历史最高分----- 是定义类的属性 top_score =0 def __init__(self, player_name) : #是定义的实例 ...

  3. Leetcode 330.按要求补齐数组

    按要求补齐数组 给定一个已排序的正整数数组 nums,和一个正整数 n .从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums 中某几个数 ...

  4. Java实现 LeetCode 330 按要求补齐数组

    330. 按要求补齐数组 给定一个已排序的正整数数组 nums,和一个正整数 n .从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums ...

  5. [Swift]LeetCode330. 按要求补齐数组 | Patching Array

    Given a sorted positive integer array nums and an integer n, add/patch elements to the array such th ...

  6. 007-TreeMap、Map和Bean互转、BeanUtils.copyProperties(A,B)拷贝、URL编码解码、字符串补齐,随机字母数字串

    一.转换 1.1.TreeMap 有序Map 无序有序转换 使用默认构造方法: public TreeMap(Map<? extends K, ? extends V> m) 1.2.Ma ...

  7. 为kubectl配置别名和命令行补齐

    配置别名 # vim ~/.bashrc 添加 alias k='kubectl' # source ~/.bashrc 配置命令行补齐 # yum install -y bash-completio ...

  8. PHP开发小技巧②—实现二维数组根据key进行排序

    在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...

  9. LeetCode第[88]题(Java):Merge Sorted Array(合并已排序数组)

    题目:合并已排序数组 难度:Easy 题目内容: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as ...

  10. Java一维与二维数组的拷贝与排序

    Java一维与二维数组的拷贝与排序 目录 Java一维与二维数组的拷贝与排序 Arrays.sort() 一维数组升序排序 二维数组按行升序排序 二维数组按列升序排序 Java中的数组 Java中数组 ...

随机推荐

  1. RK3399编译——基于nanoPC-T4

    开发环境搭建 安装依赖 sudo apt install -y bison g++-multilib git gperf libxml2-utils make python-networkx zip ...

  2. OVS学习博客推荐

    博客学习 大致看一遍 openvswitch处理upcall过程分析 upcall-cost分析 连接跟踪(conntrack):原理.应用及 Linux 内核实现 ovs upcall处理流程 Li ...

  3. 基于Pierre Dellacherie的俄罗斯方块-05Pierre Dellacherie算法

    基于Pierre Dellacherie的俄罗斯方块-05Pierre Dellacherie算法 Pierre Dellacherie算法感觉上像是一个遍历算法,给与各个参数不同的权重,使得更加合理 ...

  4. 孙勇男:实时视频 SDK 黑盒测试架构丨Dev for Dev 专栏

    Dev for Dev 专栏全称为 Developer for Developer,该专栏是声网与 RTC 开发者社区共同发起的开发者互动创新实践活动.透过工程师视角的技术分享.交流碰撞.项目共建等多 ...

  5. Kubernetes 的亲和性污点与容忍

    写在前面 我们在使用k8s过程中经常有这样的需求:我的k8s集群有多台服务器,配置不尽相同.我想把数据库部署到CPU.内存比较好的这几台机:我想把静态承载服务部署到有固态硬盘的机器等:而这些需求,就是 ...

  6. 位运算符n&(n-1)详解与妙用

    用处一:求一个int类型数是否为2的幂 1.当n=4时,二进制为:0100 n-1=3,二进制为:0011 则:n&(n-1)==0  解释(将0100最右边的1变为0 则 0000=0) 2 ...

  7. Rancher 系列文章-Rancher 升级

    概述 之前在 天翼云上用 4 台机器安装了一个 1 master(及 etcd) 3 node 的 K3S 集群,并在其上使用 Helm 安装了 Rancher 2.6.3 版本. 前几天发现 Ran ...

  8. Java BasePooledObjectFactory 对象池化技术

    Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类 一个对象池包含一组已经初始化过且可以使用的对象,而可以在有需求时创建和销毁对象.池的用户可以 ...

  9. 人工智能NVIDIA显卡计算(CUDA+CUDNN)平台搭建

    NVIDIA是GPU(图形处理器)的发明者,也是人工智能计算的引领者.我们创建了世界上最大的游戏平台和世界上最快的超级计算机. 第一步,首先安装N卡驱动. cby@cby-Inspiron-7577: ...

  10. ChatGPT 和 Midjourney 初体验

    ChatGPT 和 Midjourney 这两个系统这些天红的发紫,自己也尝试着注册和使用了一下. 一.ChatGPT 我在上周才刚刚注册 OpenAI,注册过程也比较麻烦. 国内的 IP 是无法访问 ...