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 为之前的计数 cntmaxCnt 中的较大值,并将 cnt 重置为 1。

  • 否则,递增序列继续,将 cnt 自增 1。

3.遍历结束后,再次更新 maxCnt 为最后一个递增序列的计数 cntmaxCnt 中的较大值。

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,的更多相关文章

  1. 一个数组求其最长递增子序列(LIS)

    一个数组求其最长递增子序列(LIS) 例如数组{3, 1, 4, 2, 3, 9, 4, 6}的LIS是{1, 2, 3, 4, 6},长度为5,假设数组长度为N,求数组的LIS的长度, 需要一个额外 ...

  2. 【LeetCode】665. 非递减数列 Non-decreasing Array(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 公众号:每日算法题 本文关键词:数组,array,非递减,遍历,python,C++ 目录 题目描述 题目大意 解题方法 一.错误代码 二.举例分析 ...

  3. [Swift]LeetCode665. 非递减数列 | Non-decreasing Array

    Given an array with n integers, your task is to check if it could become non-decreasing by modifying ...

  4. Leetcode 665.非递减数列

    非递减数列 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i ...

  5. LeetCode 665. 非递减数列(Non-decreasing Array)

    665. 非递减数列 665. Non-decreasing Array 题目描述 给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是 ...

  6. Leetcode665.Non-decreasing Array非递减数组

    给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n ...

  7. Java实现 LeetCode 665 非递减数列(暴力)

    665. 非递减数列 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列. 我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 < ...

  8. [程序员代码面试指南]最长递增子序列(二分,DP)

    题目 例:arr=[2,1,5,3,6,4,8,9,7] ,最长递增子序列为1,3,4,8,9 题解 step1:找最长连续子序列长度 dp[]存以arr[i]结尾的情况下,arr[0..i]中的最长 ...

  9. 动态规划----最长递增子序列问题(LIS)

    题目: 输出最长递增子序列的长度,如输入 4 2 3 1 5 6,输出 4 (因为 2 3 5 6组成了最长递增子序列). 暴力破解法:这种方法很简单,两层for循环搞定,时间复杂度是O(N2). 动 ...

  10. 求解最长递增子序列(LIS) | 动态规划(DP)+ 二分法

    1.题目描述     给定数组arr,返回arr的最长递增子序列. 2.举例     arr={2,1,5,3,6,4,8,9,7},返回的最长递增子序列为{1,3,4,8,9}. 3.解答      ...

随机推荐

  1. Hooks与事件绑定

    Hooks与事件绑定 在React中,我们经常需要为组件添加事件处理函数,例如处理表单提交.处理点击事件等.通常情况下,我们需要在类组件中使用this关键字来绑定事件处理函数的上下文,以便在函数中使用 ...

  2. Kubernetes入门实践(Pods)

    为了解决多应用联合运行的问题,同时还要不破坏容器的隔离,就要再对多个容器进行打包.Pod就是对容器的打包,里面的容器可以看成是一个整体,总是能一起调度.一起运行,绝不会出现分离的情况,而Pod属于Ku ...

  3. 测试环境治理之MYSQL索引优化篇

    作者:京东物流 李光新 1 治理背景 测试环境这个话题对于开发和测试同学一定不陌生,大家几乎每天都会接触.但是说到对测试环境的印象,却鲜有好评: •环境不稳定,测试五分钟,排查两小时 •基础建设不全, ...

  4. Xxl-job安装部署以及SpringBoot集成Xxl-job使用

    1.安装Xxl-job: 可以使用docker拉取镜像部署和源码编译两种方式,这里选择源码编译安装. 代码拉取地址: https://github.com/xuxueli/xxl-job/tree/2 ...

  5. java指定时间失效Calendar

    获取第二天的1:30的毫秒数 public static Long getEveryDayTime() { Calendar calendar = Calendar.getInstance(); ca ...

  6. VUEX(状态管理)之憨憨篇

    1.导入vuex包 import vuex from 'vuex' 2.注册vuex到vue中 vue.use(vuex) 3.new vuex.store() 得到一个数据存储对象 var stor ...

  7. pandlepanlde-01-必备数学知识

    文章目录 必备数学知识 数学基础知识 高等数学 线性代数 行列式 矩阵 向量 线性方程组 矩阵的特征值和特征向量 二次型 概率论和数理统计 随机事件和概率 随机变量及其概率分布 多维随机变量及其分布 ...

  8. Selenium 元素定位方式封装的实际应用

    一.定位方式  二.实际应用 1.项目结构 2.locator_base.py 文件 # -*- coding: utf-8 -*- from selenium.webdriver.common.by ...

  9. java线程的创建

    文章目录 前言 进程 线程 使用线程 继承Thread 线程随机性 .start()的顺序不代表.run()的顺序 实现Runnable 实例共享造成的非线程安全问题 线程常用方法: 判断线程是否为停 ...

  10. 【必知必会的MySQL知识】⑤DQL语言

    目录 一.前言 二.基础查询 2.1 语法 2.2 实践操作 三.条件查询 3.1 语法 3.2 where 语句操作符 3.3 实践操作 四.排序查询 4.1 语法格式 4.2 实践操作 五.分组查 ...