前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2022-04-13:给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。

2022-04-13:给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。

作者头像
福大大架构师每日一题
发布于 2022-06-04 02:18:47
发布于 2022-06-04 02:18:47
44700
代码可运行
举报
运行总次数:0
代码可运行

2022-04-13:给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。

如果对于每个满足 k <= i <= n-1 的下标 i ,都有 arr[i-k] <= arr[i] ,那么我们称 arr 是 K 递增 的。

比方说,arr = [4, 1, 5, 2, 6, 2] 对于 k = 2 是 K 递增的,因为:

arr[0] <= arr[2] (4 <= 5)

arr[1] <= arr[3] (1 <= 2)

arr[2] <= arr[4] (5 <= 6)

arr[3] <= arr[5] (2 <= 2)

但是,相同的数组 arr 对于 k = 1 不是 K 递增的(因为 arr[0] > arr[1]),

对于 k = 3 也不是 K 递增的(因为 arr[0] > arr[3] )。

每一次 操作 中,你可以选择一个下标 i 并将 arr[i] 改成任意 正整数。

请你返回对于给定的 k ,使数组变成 K 递增的 最少操作次数 。

力扣2111。

答案2022-04-13:

拆分成k个数组,分别求最长递增子序列,然后做差,最后求和。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import "fmt"

func main() {
  arr := []int{5, 4, 3, 2, 1}
  k := 2
  ret := kIncreasing(arr, k)
  fmt.Println(ret)
}

func kIncreasing(arr []int, k int) int {
  n := len(arr)
  // a / b = 向下取整
  // a / b 向上取整 -> (a + b - 1) / b
  help := make([]int, (n+k-1)/k)
  ans := 0
  for i := 0; i < k; i++ {
    ans += need(arr, help, n, i, k)
  }
  return ans
}

// arr[start , start + k, start + 2k, start + 3k,....]
// 辅助数组help,为了求最长递增子序列,需要开辟的空间,具体看体系学习班
// 上面的序列,要改几个数,能都有序!
func need(arr, help []int, n, start, k int) int {
  j := 0
  size := 0
  for ; start < n; start, j = start+k, j+1 {
    size = insert(help, size, arr[start])
  }
  return j - size
}

func insert(help []int, size, num int) int {
  l := 0
  r := size - 1
  m := 0
  ans := size
  for l <= r {
    m = (l + r) / 2
    if help[m] > num {
      ans = m
      r = m - 1
    } else {
      l = m + 1
    }
  }
  help[ans] = num
  if ans == size {
    return size + 1
  } else {
    return size
  }
}

执行结果如下:

***

[左神java代码](https://github.com/algorithmzuo/weekly-problems/blob/main/src/class_2022_01_2_week/Code04_MinimumOperationsToMakeTheArrayKIncreasing.java)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2022-04-13:给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。
2022-04-13:给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。
福大大架构师每日一题
2022/04/13
4110
【算法专题】动态规划之子序列问题
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。 例如,[3, 6, 2, 7] 是数组[0, 3, 1, 6, 2, 2, 7] 的子序列。
YoungMLet
2024/03/01
3460
【算法专题】贪心算法
题目:在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。
YoungMLet
2024/03/01
1630
【算法专题】贪心算法
2025-04-19:最长上升路径的长度。用go语言,给你一个长度为 n 的二维整数数组 coordinates 和一个整数 k
2025-04-19:最长上升路径的长度。用go语言,给你一个长度为 n 的二维整数数组 coordinates 和一个整数 k(满足 0 <= k < n)。
福大大架构师每日一题
2025/04/19
560
2025-04-19:最长上升路径的长度。用go语言,给你一个长度为 n 的二维整数数组 coordinates 和一个整数 k
2022-04-27:Alice 有一个下标从 0 开始的数组 arr ,由 n 个正整数组成。她会选择一个任意的 正整数 k 并按下述方式创建两个下标从 0
2022-04-27:Alice 有一个下标从 0 开始的数组 arr ,由 n 个正整数组成。她会选择一个任意的 正整数 k 并按下述方式创建两个下标从 0 开始的新整数数组 lower 和 higher :
福大大架构师每日一题
2022/04/27
8100
【动态规划】子序列问题
和子数组不同的是,子数组要求是连续的,子序列只要下标是递增的就可以,这里严格递增的意思是不能有相等的元素,必须一直递增
2的n次方
2024/10/23
1900
十道腾讯算法真题解析!
大家好,我是捡田螺的小男孩。收集了腾讯常考的十道算法题(真题)。在金三银四,希望对大家有帮助呀。
捡田螺的小男孩
2022/04/06
8880
十道腾讯算法真题解析!
2022-12-22:给定一个数字n,代表数组的长度, 给定一个数字m,代表数组每个位置都可以在1~m之间选择数字, 所有长度为n的数组中,最长递增子序列长度为
2022-12-22:给定一个数字n,代表数组的长度,给定一个数字m,代表数组每个位置都可以在1~m之间选择数字,所有长度为n的数组中,最长递增子序列长度为3的数组,叫做达标数组。返回达标数组的数量。1 <= n <= 500,1 <= m <= 10,500 10 10 * 10,结果对998244353取模,实现的时候没有取模的逻辑,因为非重点。来自微众银行。答案2022-12-22:参考最长递增子序列。代码用rust编写。代码如下:use std::iter::repeat;fn main() {
福大大架构师每日一题
2022/12/22
2.3K0
2022-12-22:给定一个数字n,代表数组的长度, 给定一个数字m,代表数组每个位置都可以在1~m之间选择数字, 所有长度为n的数组中,最长递增子序列长度为
【数据结构和算法】寻找数组的中心下标
这是力扣的 724 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。
绿毛龟
2024/01/19
1670
【数据结构和算法】寻找数组的中心下标
文心一言 VS 讯飞星火 VS chatgpt (209)-- 算法导论15.4 6题
要设计一个 O(nlgn) 时间的算法来求一个 n 个数的序列的最长单调递增子序列,我们可以使用动态规划结合二分查找的方法,也就是经典的“最长递增子序列”(Longest Increasing Subsequence, LIS)问题。
福大大架构师每日一题
2024/03/18
1110
文心一言 VS 讯飞星火 VS chatgpt (209)-- 算法导论15.4 6题
2021-11-16:最长递增子序列的个数。给定一个未排序的整
2021-11-16:最长递增子序列的个数。给定一个未排序的整数数组,找到最长递增子序列的个数。注意: 给定的数组长度不超过 2000 并且结果一定是32位有符号整数。力扣673。
福大大架构师每日一题
2021/11/16
2390
文心一言 VS 讯飞星火 VS chatgpt (208)-- 算法导论15.4 5题
在 Go 语言中设计一个 O(n^2) 时间复杂度的算法来求一个 n 个数的序列的最长单调递增子序列(Longest Increasing Subsequence, LIS)可以使用动态规划的方法。以下是一个实现示例:
福大大架构师每日一题
2024/03/06
1720
文心一言 VS 讯飞星火 VS chatgpt (208)-- 算法导论15.4 5题
2023-05-16:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 输入:arr = [2,3,
2023-05-16:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。
福大大架构师每日一题
2023/05/16
2960
2021-04-04:给定一个非负数组arr,和一个正数m的最大值。
2021-04-04:给定一个非负数组arr,和一个正数m。 返回arr的所有子序列中累加和%m之后的最大值。
福大大架构师每日一题
2021/04/04
8740
2021-04-04:给定一个非负数组arr,和一个正数m的最大值。
【序列DP】最长递增子序列的个数 / 最长定差子序列 / 等差数列划分 II - 子序列
定义状态表示:f[i] 为以i位置元素为结尾的所有子序列中,最后呈 “上升” 状态的最长子序列的长度;g[i] 为以i位置元素为结尾的所有子序列中,最后呈 “下降” 状态的最长子序列的长度。
_小羊_
2025/04/09
750
【序列DP】最长递增子序列的个数 / 最长定差子序列 / 等差数列划分 II - 子序列
2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一个或几个 长度至少 为
3.遍历结束后,再次更新 maxCnt 为最后一个递增序列的计数 cnt 和 maxCnt 中的较大值。
福大大架构师每日一题
2023/07/25
2190
2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一个或几个 长度至少 为
【算法专题】记忆化搜索
什么是记忆化搜索呢?记忆化搜索其实就是带了"备忘录"的递归,给递归加上一个"备忘录",递归每次返回的时候,将结果放到"备忘录"里面,在每次进入递归的时候,往"备忘录"里面看看,当前需要递归的数据时候在"备忘录"里存在,如果存在,那么就可以直接取此次的结果,不用进行这次的递归。
YoungMLet
2024/03/01
2400
【算法专题】记忆化搜索
Leetcode | 第A节:数组综合题(1)
在这一节我们开始更多关注数组和字符串的一些题目。事实上不仅仅是我们,官方也很难将这两个类别的题目,从算法或者数据结构的角度进行区分。毕竟很多很多的算法题都需要依赖数组,所有的字符串的题目不管用什么方法去做,它也都是字符串相关的问题。因此,我们在一开始介绍这些的时候,也会大概率与之前已经介绍的一些内容相结合。
学弱猹
2021/08/06
5120
2023-08-24:请用go语言编写。给定一个长度为n的数组arr, 现在你有一次机会, 将其中连续的K个数全修改成任意一个值
1.定义常量MAXN为100001,声明全局数组和变量:arr、right、ends、n和k。这些数组和变量将用于存储计算过程中的中间结果和输入数据。
福大大架构师每日一题
2023/08/29
2390
2023-08-24:请用go语言编写。给定一个长度为n的数组arr, 现在你有一次机会, 将其中连续的K个数全修改成任意一个值
2022-01-13:K 个不同整数的子数组。 给定一个正整数数组
给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定不同的子数组为好子数组。
福大大架构师每日一题
2022/01/13
2940
推荐阅读
2022-04-13:给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。
4110
【算法专题】动态规划之子序列问题
3460
【算法专题】贪心算法
1630
2025-04-19:最长上升路径的长度。用go语言,给你一个长度为 n 的二维整数数组 coordinates 和一个整数 k
560
2022-04-27:Alice 有一个下标从 0 开始的数组 arr ,由 n 个正整数组成。她会选择一个任意的 正整数 k 并按下述方式创建两个下标从 0
8100
【动态规划】子序列问题
1900
十道腾讯算法真题解析!
8880
2022-12-22:给定一个数字n,代表数组的长度, 给定一个数字m,代表数组每个位置都可以在1~m之间选择数字, 所有长度为n的数组中,最长递增子序列长度为
2.3K0
【数据结构和算法】寻找数组的中心下标
1670
文心一言 VS 讯飞星火 VS chatgpt (209)-- 算法导论15.4 6题
1110
2021-11-16:最长递增子序列的个数。给定一个未排序的整
2390
文心一言 VS 讯飞星火 VS chatgpt (208)-- 算法导论15.4 5题
1720
2023-05-16:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 输入:arr = [2,3,
2960
2021-04-04:给定一个非负数组arr,和一个正数m的最大值。
8740
【序列DP】最长递增子序列的个数 / 最长定差子序列 / 等差数列划分 II - 子序列
750
2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一个或几个 长度至少 为
2190
【算法专题】记忆化搜索
2400
Leetcode | 第A节:数组综合题(1)
5120
2023-08-24:请用go语言编写。给定一个长度为n的数组arr, 现在你有一次机会, 将其中连续的K个数全修改成任意一个值
2390
2022-01-13:K 个不同整数的子数组。 给定一个正整数数组
2940
相关推荐
2022-04-13:给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验