2021-08-11:按要求补齐数组。给定一个已排序的正整数数组 nums,和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用
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
}
执行结果如下:

2021-08-11:按要求补齐数组。给定一个已排序的正整数数组 nums,和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用的更多相关文章
- 9.11排序与查找(一)——给定两个排序后的数组A和B,当中A的末端有足够的缓冲空间容纳B。将B合并入A并排序
/** * 功能:给定两个排序后的数组A和B,当中A的末端有足够的缓冲空间容纳B.将B合并入A并排序. */ /** * 问题:假设将元素插入数组A的前端,就必须将原有的元素向后移动,以腾出空间. ...
- 18 11 05 继续补齐对python中的class不熟悉的地方 和 pygame 精灵
---恢复内容开始--- class game : #历史最高分----- 是定义类的属性 top_score =0 def __init__(self, player_name) : #是定义的实例 ...
- Leetcode 330.按要求补齐数组
按要求补齐数组 给定一个已排序的正整数数组 nums,和一个正整数 n .从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums 中某几个数 ...
- Java实现 LeetCode 330 按要求补齐数组
330. 按要求补齐数组 给定一个已排序的正整数数组 nums,和一个正整数 n .从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums ...
- [Swift]LeetCode330. 按要求补齐数组 | Patching Array
Given a sorted positive integer array nums and an integer n, add/patch elements to the array such th ...
- 007-TreeMap、Map和Bean互转、BeanUtils.copyProperties(A,B)拷贝、URL编码解码、字符串补齐,随机字母数字串
一.转换 1.1.TreeMap 有序Map 无序有序转换 使用默认构造方法: public TreeMap(Map<? extends K, ? extends V> m) 1.2.Ma ...
- 为kubectl配置别名和命令行补齐
配置别名 # vim ~/.bashrc 添加 alias k='kubectl' # source ~/.bashrc 配置命令行补齐 # yum install -y bash-completio ...
- PHP开发小技巧②—实现二维数组根据key进行排序
在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...
- LeetCode第[88]题(Java):Merge Sorted Array(合并已排序数组)
题目:合并已排序数组 难度:Easy 题目内容: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as ...
- Java一维与二维数组的拷贝与排序
Java一维与二维数组的拷贝与排序 目录 Java一维与二维数组的拷贝与排序 Arrays.sort() 一维数组升序排序 二维数组按行升序排序 二维数组按列升序排序 Java中的数组 Java中数组 ...
随机推荐
- mac git远程仓库错误解决方法
mac更新后不知道怎么回事,git时出现了 Permission denied (publickey). 经查询后得出原因 1.首先给git进行config的配置 git config --globa ...
- 深入理解 Python 虚拟机:复数(complex)的实现原理及源码剖析
深入理解 Python 虚拟机:复数(complex)的实现原理及源码剖析 在本篇文章当中主要给大家介绍在 cpython 虚拟机当中是如何实现 复数 complex 这个数据类型的,这个数据类型在 ...
- 手把手 Golang 实现静态图像与视频流人脸识别
说起人脸识别,大家首先想到的实现方式应该是 Python 去做相关的处理,因为相关的机器学习框架,库都已经封装得比较好了.但是我们今天讨论的实现方式换成 Golang,利用 Golang 去做静态图像 ...
- 深入理解Go语言中的sync.Cond
1. 简介 本文将介绍 Go 语言中的 sync.Cond 并发原语,包括 sync.Cond的基本使用方法.实现原理.使用注意事项以及常见的使用使用场景.能够更好地理解和应用 Cond 来实现 go ...
- Java中的String类真的不可变吗?java面试常见问题
其实在Java中,String类被final修饰,主要是为了保证字符串的不可变性,进而保证了它的安全性.那么final到底是怎么保证字符串安全性的呢?接下来就让我们一起来看看吧. 一. final ...
- vue核心原理(Diff算法、虚拟dom)
核心原理&源码 Diff 算法 这里参考大佬文章:https://mp.weixin.qq.com/s/oAlVmZ4Hbt2VhOwFEkNEhw diff 算法的进化 关于 diff 算法 ...
- webpack踩坑日记
webpack 4.x 详细入门这是一个大佬的总结,但是我用webpack5重写该demo时,发现了几个有问题的地方1:CleanWebpackPlugin 应该这样: const { CleanWe ...
- scp上传文件No such file or directory 问题
问题描述 window使用scp复制文件到linux时报 No such file or directory 错误 解决办法 本地复制到Linux,win环境必须用绝对路径 上传成功
- 多台服务器之间配置ssh免密登录
需求:假设有N台服务器,N台服务器之间都需要配置相互间免密登录 步骤1:在一台服务器上安装ansible yum -y install epel-release && yum -y ...
- 利用NGINX搭建部署直播流媒体服务器
直播如今是一个老生常谈的问题,怎么用于直播,大多数人只晓得,大佬某平台直播软件,点击开始即可直播.那么如何来搭建一个简易的直播平台呢?仅仅是有直播功能,没有涉及转码以及播放软件. 安装nginx以及r ...