2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一个或几个 长度至少 为 K 的 不相交的递增子序列。 输入:nums = [1,2,2,3,3,
2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K,
判断该数组是否可以被分成一个或几个 长度至少 为 K 的 不相交的递增子序列。
输入:nums = [1,2,2,3,3,4,4], K = 3。
输出:true。
答案2023-07-15:
大体步骤如下:
1.初始化计数变量 cnt 和最大计数变量 maxCnt,初始值都为 1。
2.从索引 1 开始遍历数组 nums:
如果
nums[i-1]不等于nums[i],说明遇到了一个新的递增序列,更新maxCnt为之前的计数cnt和maxCnt中的较大值,并将cnt重置为 1。否则,递增序列继续,将
cnt自增 1。
3.遍历结束后,再次更新 maxCnt 为最后一个递增序列的计数 cnt 和 maxCnt 中的较大值。
4.判断长度为 len(nums) 除以 maxCnt 后是否大于等于 k,如果是,返回 true;否则,返回 false。
5.在 main 函数中,定义数组 nums 和整数 k。
6.调用函数 canDivideIntoSubsequences(nums, k) 并将结果赋给变量 result。
7.输出结果 Result: true。
时间复杂度:
遍历数组 nums 的时间复杂度为 O(n),其中 n 是数组 nums 的长度。
因此,整个算法的时间复杂度为 O(n)。
空间复杂度:
算法使用了常数级别的额外空间,不随输入规模变化,所以空间复杂度为 O(1)。
go完整代码如下:
package main
import (
"fmt"
)
func canDivideIntoSubsequences(nums []int, k int) bool {
cnt := 1
maxCnt := 1
for i := 1; i < len(nums); i++ {
if nums[i-1] != nums[i] {
maxCnt = max(maxCnt, cnt)
cnt = 1
} else {
cnt++
}
}
maxCnt = max(maxCnt, cnt)
return len(nums)/maxCnt >= k
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
nums := []int{1, 2, 2, 3, 3, 4, 4}
k := 3
result := canDivideIntoSubsequences(nums, k)
fmt.Println("Result:", result)
}

rust完整代码如下:
fn can_divide_into_subsequences(nums: &[i32], k: i32) -> bool {
let mut cnt = 1;
let mut max_cnt = 1;
for i in 1..nums.len() {
if nums[i - 1] != nums[i] {
max_cnt = max_cnt.max(cnt);
cnt = 1;
} else {
cnt += 1;
}
}
max_cnt = max_cnt.max(cnt);
nums.len() as i32 / max_cnt >= k
}
fn main() {
let nums = vec![1, 2, 2, 3, 3, 4, 4];
let k = 3;
let result = can_divide_into_subsequences(&nums, k);
println!("Result: {}", result);
}

c++完整代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool canDivideIntoSubsequences(vector<int>& nums, int k) {
int cnt = 1;
int maxCnt = 1;
for (int i = 1; i < nums.size(); i++) {
if (nums[i - 1] != nums[i]) {
maxCnt = max(maxCnt, cnt);
cnt = 1;
}
else {
cnt++;
}
}
maxCnt = max(maxCnt, cnt);
return nums.size() / maxCnt >= k;
}
int main() {
vector<int> nums = { 1, 2, 2, 3, 3, 4, 4 };
int k = 3;
bool result = canDivideIntoSubsequences(nums, k);
cout << "Result: " << boolalpha << result << endl;
return 0;
}

c完整代码如下:
#include <stdio.h>
int canDivideIntoSubsequences(int nums[], int length, int k) {
int cnt = 1;
int maxCnt = 1;
for (int i = 1; i < length; i++) {
if (nums[i - 1] != nums[i]) {
if (maxCnt < cnt) {
maxCnt = cnt;
}
cnt = 1;
}
else {
cnt++;
}
}
if (maxCnt < cnt) {
maxCnt = cnt;
}
return (length / maxCnt) >= k;
}
int main() {
int nums[] = { 1, 2, 2, 3, 3, 4, 4 };
int length = sizeof(nums) / sizeof(nums[0]);
int k = 3;
int result = canDivideIntoSubsequences(nums, length, k);
printf("Result: %s\n", result ? "true" : "false");
return 0;
}

2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一个或几个 长度至少 为 K 的 不相交的递增子序列。 输入:nums = [1,2,2,3,3,的更多相关文章
- 一个数组求其最长递增子序列(LIS)
一个数组求其最长递增子序列(LIS) 例如数组{3, 1, 4, 2, 3, 9, 4, 6}的LIS是{1, 2, 3, 4, 6},长度为5,假设数组长度为N,求数组的LIS的长度, 需要一个额外 ...
- 【LeetCode】665. 非递减数列 Non-decreasing Array(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 公众号:每日算法题 本文关键词:数组,array,非递减,遍历,python,C++ 目录 题目描述 题目大意 解题方法 一.错误代码 二.举例分析 ...
- [Swift]LeetCode665. 非递减数列 | Non-decreasing Array
Given an array with n integers, your task is to check if it could become non-decreasing by modifying ...
- Leetcode 665.非递减数列
非递减数列 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i ...
- LeetCode 665. 非递减数列(Non-decreasing Array)
665. 非递减数列 665. Non-decreasing Array 题目描述 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是 ...
- Leetcode665.Non-decreasing Array非递减数组
给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n ...
- Java实现 LeetCode 665 非递减数列(暴力)
665. 非递减数列 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 < ...
- [程序员代码面试指南]最长递增子序列(二分,DP)
题目 例:arr=[2,1,5,3,6,4,8,9,7] ,最长递增子序列为1,3,4,8,9 题解 step1:找最长连续子序列长度 dp[]存以arr[i]结尾的情况下,arr[0..i]中的最长 ...
- 动态规划----最长递增子序列问题(LIS)
题目: 输出最长递增子序列的长度,如输入 4 2 3 1 5 6,输出 4 (因为 2 3 5 6组成了最长递增子序列). 暴力破解法:这种方法很简单,两层for循环搞定,时间复杂度是O(N2). 动 ...
- 求解最长递增子序列(LIS) | 动态规划(DP)+ 二分法
1.题目描述 给定数组arr,返回arr的最长递增子序列. 2.举例 arr={2,1,5,3,6,4,8,9,7},返回的最长递增子序列为{1,3,4,8,9}. 3.解答 ...
随机推荐
- DeFi-W3
Gas Fee 每一笔交易都会产生Gas Fee. GWei ETH的最小单位 出价(gas fee)的高低会影响交易上联的速度,越快就价格越高. gas fee是跟具体的计算量有关的 Smart c ...
- win系统安装wordcloud报错解决方案
问题: ① 在命令行下执行pip install wordcloud出现报错如图: ②下载了错误的whl文件, 出现wordcloud-1.4.1-cp27-cp27m-win_amd64.whl i ...
- JavaWeb之04javaScript基础&DOM目录
目录: 1.案例:在末尾添加节点(*****) ** 创建标签 createElement方法 ** 创建文本 createTextNode方法 ** 把文本添加到标签下面 appendChild方法 ...
- 2023-04-28:将一个给定字符串 s 根据给定的行数 numRows 以从上往下、从左到右进行 Z 字形排列 比如输入字符串为 “PAYPALISHIRING“ 行数为 3 时,排列如下 P
2023-04-28:将一个给定字符串 s 根据给定的行数 numRows 以从上往下.从左到右进行 Z 字形排列 比如输入字符串为 "PAYPALISHIRING" 行数为 3 ...
- 2022-07-16:以下go语言代码输出什么?A:[];B:[5];C:[5 0 0 0 0];D:[0 0 0 0 0]。 package main import ( “fmt“ )
2022-07-16:以下go语言代码输出什么?A:[]:B:[5]:C:[5 0 0 0 0]:D:[0 0 0 0 0]. package main import ( "fmt" ...
- 2021-07-27:给定一个数组arr,长度为N,arr中的值只有1,2,3三种。arr[i] == 1,代表汉诺塔问题中,从上往下第i个圆盘目前在左;arr[i] == 2,代表汉诺塔问题中,从上
2021-07-27:给定一个数组arr,长度为N,arr中的值只有1,2,3三种.arr[i] == 1,代表汉诺塔问题中,从上往下第i个圆盘目前在左:arr[i] == 2,代表汉诺塔问题中,从上 ...
- Python忽略NoData计算多张遥感影像的像元平均值:whitebox库
本文介绍基于Python中whitebox模块,对大量长时间序列栅格遥感影像的每一个像元进行忽略NoData值的多时序平均值求取. 在文章Python ArcPy批量计算多时相遥感影像的各像元 ...
- 园子的商业化努力-AI人才服务:招募AI导师
各位园子的小伙伴: 感谢大家对园子的支持,园子差不多接近20年的历程,一直是最低配模式生存和发展,感谢大家对于前段时间的困局给予了商业化的各种建议!在大家的鼓励与支持之下,园子的商业化努力正在以更快的 ...
- NLM 公布了一个新的重新设计的 PubMed 数据库
经常使用 PubMed 的童鞋可能已经发现,美国国家医学图书馆(NLM)在今年 10 月份左右发布了一个新的重新设计的版本以取代 PubMed 数据库的现有版本,新版本现在已经上线,可以通过下面的链接 ...
- 白帽子讲web安全
世界安全观 Web安全筒史 起初,研究计算机系统和网络的人,被称为"Hacker","Hacker"在中国按照音译,被称为"黑客" 对于现代 ...