673. 最长递增子序列的个数

news2024/9/25 19:22:44

673. 最长递增子序列的个数

  • 原题链接:
  • 完成情况:
  • 解题思路:
    • 方法一:动态规划
    • 方法二:贪心 + 前缀和 + 二分查找
  • 参考代码:
    • __673最长递增子序列的个数__动态规划
    • __673最长递增子序列的个数__贪心_前缀和_二分查找

原题链接:

673. 最长递增子序列的个数

https://leetcode.cn/problems/number-of-longest-increasing-subsequence/description/

完成情况:

在这里插入图片描述

解题思路:

方法一:动态规划

在这里插入图片描述

方法二:贪心 + 前缀和 + 二分查找

在这里插入图片描述

参考代码:

__673最长递增子序列的个数__动态规划

package 西湖算法题解___中等题;

public class __673最长递增子序列的个数__动态规划 {
	public int findNumberOfLIS(int[] nums) {
		//给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 。
		//注意: 这个数列必须是 严格 递增的。严格大于。
		//注意是返回最长递增子序列的个数
		/**
		 每一个最长递增,都与之前的长度有关
		 */
		int numsLength = nums.length,maxLen = 0,res = 0;
		int dp_findNumberOfLIS [] = new int[numsLength];
		int count [] = new int[numsLength];
		for (int i = 0;i<numsLength;i++){
			dp_findNumberOfLIS[i] = 1;
			count[i] = 1;
			for (int j=0;j<i;j++){
				if (nums[i] > nums[j]){
					if (dp_findNumberOfLIS[j] + 1 > dp_findNumberOfLIS[i]){
						dp_findNumberOfLIS[i] = dp_findNumberOfLIS[j] + 1;
						count[i] = count[j];    //重置计数
					} else if (dp_findNumberOfLIS[j]+1 == dp_findNumberOfLIS[i]) {
						count[i]+=count[j];
					}
				}
			}
			if (dp_findNumberOfLIS[i] > maxLen){
				maxLen = dp_findNumberOfLIS[i];
				res = count[i];     //重制计数
			} else if (dp_findNumberOfLIS[i] == maxLen) {
				res += count[i];
			}
		}
		return res;
	}
}

__673最长递增子序列的个数__贪心_前缀和_二分查找

package 西湖算法题解___中等题;

import java.util.ArrayList;
import java.util.List;

public class __673最长递增子序列的个数__贪心_前缀和_二分查找 {

	public int findNumberOfLIS(int[] nums){
		List<List<Integer>> d = new ArrayList<List<Integer>>();
		List<List<Integer>> cnt = new ArrayList<List<Integer>>();
		for (int v : nums){
			int i = myBinarySearch1(d.size(),d,v);
			int c = 1;
			if (i > 0){
				int k = myBinarySearch2(d.get(i-1).size(),d.get(i-1),v);
				c = cnt.get(i-1).get(cnt.get(i-1).size()-1) - cnt.get(i-1).get(k);
			}
			if (i == d.size()){
				List<Integer> dList = new ArrayList<Integer>();
				dList.add(v);
				d.add(dList);
				List<Integer> cntList = new ArrayList<Integer>();
				cntList.add(0);
				cntList.add(c);
				cnt.add(cntList);
			}else {
				d.get(i).add(v);
				int cntSize = cnt.get(i).size();
				cnt.get(i).add(cnt.get(i).get(cntSize-1)+c);
			}
		}
		int size1 = cnt.size(),size2 = cnt.get(size1-1).size();
		return cnt.get(size1 - 1).get(size2-1);
	}

	/**
	 *
	 * @param n
	 * @param list
	 * @param target
	 * @return
	 */
	private int myBinarySearch2(int n, List<Integer> list, int target) {
		int left = 0,right = n;
		while (left < right){
			int mid = (left + right) /2;
			if (list.get(mid) < target){
				right = mid;
			}else {
				left = mid + 1;
			}
		}
		return left;
	}

	/**
	 * 
	 * @param n
	 * @param d
	 * @param target
	 * @return
	 */
	private int myBinarySearch1(int n, List<List<Integer>> d, int target) {
		int left = 0,right = n;
		while (left < right){
			int mid = (left + right) /2;
			List<Integer> list = d.get(mid);
			if (list.get(list.size() - 1) >= target){
				right = mid;
			}else {
				left = mid + 1;
			}
		}
		return left;
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/921753.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在测试和预发环境下调试支付宝微信小程序的h5

微信 开发者工具调试 1、使用开发者工具打开 2、点击蜘蛛形状的小图标&#xff0c;就会出现调试页面 支付宝 真机调试 下载 1、工具下载&#xff1a;蚂蚁开发者工具&#xff08;支付宝小程序开发者工具&#xff09;&#xff1a; 蚂蚁开发者工具官方下载_蚂蚁开发者工具最…

港联证券|指数或进入磨底阶段 短期关注环保、煤炭等板块

磨底历来都不是一天能达到的&#xff0c;比方2018年的政策底到商场底&#xff0c;半途也阅历两个多月时间。当下政策底出现之后至今也有近一个月时间&#xff0c;并且下跌量能不断缩短&#xff0c;心情面也降至冰点&#xff0c;种种迹象阐明离真正商场底的构成已经不远了。此时…

【Java】树结构SQL数据的如何去实现搜索

这里写自定义目录标题 需要实现的效果前端需要的json格式&#xff1a;一定是一个完整的树结构错误错误的返回格式错误的返回格式实现的效果 正确正确的返回格式正确的展示画面 后端逻辑分析代码总览 数据库表结构 需要实现的效果 前端需要的json格式&#xff1a;一定是一个完整…

LinkedList的顶级理解

目录 1.LinkedList的介绍 LinkedList的结构 2.LinkedList的模拟实现 2.1创建双链表 2.2头插法 2.3尾插法 2.4任意位置插入 2.5查找关键字 2.6链表长度 2.7遍历链表 2.8删除第一次出现关键字为key的节点 2.9删除所有值为key的节点 2.10清空链表 2.11完整代码 3.…

PowerJob容器的使用(创建一个外置动态加载的任务)

1.使用容器的模板生成功能 2. 解压导入到IDEA中&#xff0c;下载依赖&#xff0c;添加处理器 3. 打包成jar 4. 上传项目到容器 5. 启动容器--部署jar 6. 复制一份上篇文章写的测试单机执行的任务实例&#xff0c;把执行配置修改从外置&#xff08;动态加载&#xff09; &…

scratch计算圆的面积和周长 2023年5月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch计算圆的面积和周长 一、题目要求 1、准备工作 2、功能实现 二、案例分析

vue 简单实验 自定义组件 传参数 props

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"todo-list-app"><todo-item v-bind:todo"todo1"></todo-item> </div> <script> const ListR…

IIS短文件泄漏漏洞修改

升级netFramework至4.0以上版本 2.关闭Web服务扩展- ASP.NET&#xff08;不使用的可以关闭&#xff09; 3.CMD关闭NTFS 8.3文件格式的支持&#xff08;1代表关闭&#xff0c;0代表开启&#xff09; 不同系统关闭命令稍有区别&#xff0c;该功能默认是开启的&#xff0c;对于大多…

Rust之自动化测试(一):如何编写测试

开发环境 Windows 10Rust 1.71.1 VS Code 1.81.1 项目工程 这里继续沿用上次工程rust-demo 编写自动化测试 Edsger W. Dijkstra在他1972年的文章《谦逊的程序员》中说&#xff0c;“程序测试可以是一种非常有效的方法来显示错误的存在&#xff0c;但它对于显示它们的不存在…

用python从零开始做一个最简单的小说爬虫带GUI界面(2/3)

目录 前一章博客 前言 主函数的代码实现 逐行代码解析 获取链接 获取标题 获取网页源代码 获取各个文章的链接 函数的代码 导入库文件 获取文章的标题 获取文章的源代码 提取文章目录的各个文章的链接 总代码 下一章内容 前一章博客 用python从零开始做一个最简单…

软考高项(九)项目范围管理 ★重点集萃★

&#x1f451; 个人主页 &#x1f451; &#xff1a;&#x1f61c;&#x1f61c;&#x1f61c;Fish_Vast&#x1f61c;&#x1f61c;&#x1f61c; &#x1f41d; 个人格言 &#x1f41d; &#xff1a;&#x1f9d0;&#x1f9d0;&#x1f9d0;说到做到&#xff0c;言出必行&am…

这样才能玩转Linux内核之CPU篇

哈喽&#xff0c;我是子牙&#xff0c;一个很卷的硬核男人 深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果&#xff0c;一年磨一剑&#xff0c;三年先后做了三个课程&#xff1a;手写JVM、手写OS及…

【AutoLayout案例04-游戏图片-按钮适配 Objective-C语言】

一、好,我们再看一个案例, 刚才,这个案例, 这么一个案例 这个案例,是什么意思呢, 这里给大家做一个3.5英寸、4.0英寸的屏幕适配, 因为我们这里图片,只有一个,就是4英寸的这么一个图片 什么意思呢,要求我们在3.5英寸的屏幕、和4英寸的屏幕的时候,都能正常显示这个图…

从零开始的Hadoop学习(一) | 大数据概念、特点、应用场景、发展前景

1. 大数据概念 大数据(Big Data)&#xff1a;指 无法在一定时间范围 内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的 海量、高增长率和多样化 的 信息资产。 大数据主要解决&#xff0c;海量…

创新生物药-创新药物研发-发展趋势分析(一文看懂)

随着科技的不断进步和生物医学领域的快速发展&#xff0c;生物创新药研发成为了推动医学进步和改善人类健康的重要领域。目前生物药包含了蛋白类药物、基因疗法、抗原、细菌、病毒、真菌、酵母、生物类似药、外泌体药物、免疫疗法、可溶性受体、克隆技术、微生物技术等药物&…

【Cortex-M3权威指南】学习笔记1 - 概览与基础

介绍 三种主流 Cortex 款式 款式 A&#xff1a;设计用于高性能的“开放应用平台” 款式 R&#xff1a;用于高端的嵌入式系统&#xff0c;尤其是那些带有实时要求的 款式 M&#xff1a;用于深度嵌入的&#xff0c;单片机风格的系统中 指令集发展 ARM 处理器一直支持两种形式上…

10个最好的云GPU服务

随着深度学习、人工智能和机器学习等新技术的出现&#xff0c;云 GPU 的需求量很大。 GPU&#xff08;图形处理单元&#xff09;是专用处理器&#xff0c;用于处理计算机图形和游戏等活动所需的大量数据集和复杂计算。不过&#xff0c;它们现在对人工智能&#xff08;A.I.&…

我们在深圳聊了聊娱乐产品怎么“玩”!

伴随着移动互联网的普及&#xff0c;国内娱乐社交产品呈现出多元化发展趋势。 根据相关调研显示&#xff0c;一般普通用户通常会同时选择至少 3 款同类娱乐社交应用作为日常休闲、社交工具。可以说&#xff0c;各类垂直赛道聚集了大量新老“玩家”。 在如此激烈的竞争环境下&am…

Openlayers实战:启动、取消事件的监测

在Openlayers的实际项目中,我们会用到各种地图事件,比如click,dblclick,change,loadstart … 监测的时候往往用on(‘事件名称’,回调函数)来操作,但是取消这些事件的监控怎么做呢,请参考源代码。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhuanlan),还是大剑师…

Java百度提前批面试题

今天分享百度提前批的 Java 后端开发面经&#xff0c;整体上考察的点挺多的&#xff0c;主要重点考察了网络i/o、网络协议、linux系统、mysql&#xff0c;Java 问的不多&#xff0c;可能是百度的后端开发的语言不是主要以 Java 为主&#xff0c;所以重点看面试者的计算机基础是…