【每日力扣】491. 非递减子序列与122. 买卖股票的最佳时机 II

在这里插入图片描述

🔥 个人主页: 黑洞晓威
😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害。

491. 非递减子序列

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。

数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。

示例 1:

输入:nums = [4,6,7,7]
输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]

示例 2:

输入:nums = [4,4,3,2,1]
输出:[[4,4]]

解题思路

要找出数组中的递增子序列,可以采用回溯法(Backtracking)进行求解。回溯法是一种通过尝试所有可能的候选解来求解问题的方法。在这个问题中,我们需要按照一定的规则来构建递增子序列,并记录下符合条件的结果。

具体的解题思路如下:

  1. 定义一个递归函数 backtrack,传入以下参数:
    • start:当前处理的起始位置。
    • path:当前的递增子序列。
  2. 在递归函数中,从 start位置开始遍历数组,对于每个元素,判断是否可以将其加入到当前的子序列中:
    • 如果可以加入(即当前元素大于等于子序列的最后一个元素),则将其加入到 path 中,并递归调用 backtrack 函数继续处理下一个位置。
    • 处理完当前位置后,需要将当前元素从 path 中移除,以便尝试其他可能的组合。
  3. 在递归的过程中,如果发现当前的 path 中至少有两个元素,则将其加入到结果集中。

代码

import java.util.ArrayList;
import java.util.List;public class IncreasingSubsequences {public List<List<Integer>> findSubsequences(int[] nums) {List<List<Integer>> result = new ArrayList<>();List<Integer> path = new ArrayList<>();backtrack(nums, 0, path, result);return result;}private void backtrack(int[] nums, int start, List<Integer> path, List<List<Integer>> result) {if (path.size() >= 2) {result.add(new ArrayList<>(path));}if (start >= nums.length) {return;}// 使用 Set 避免重复元素Set<Integer> used = new HashSet<>();for (int i = start; i < nums.length; i++) {if (!used.contains(nums[i]) && (path.isEmpty() || nums[i] >= path.get(path.size() - 1))) {path.add(nums[i]);used.add(nums[i]);backtrack(nums, i + 1, path, result);path.remove(path.size() - 1);}}}public static void main(String[] args) {int[] nums1 = {4, 6, 7, 7};int[] nums2 = {4, 4, 3, 2, 1};IncreasingSubsequences solution = new IncreasingSubsequences();List<List<Integer>> result1 = solution.findSubsequences(nums1);List<List<Integer>> result2 = solution.findSubsequences(nums2);System.out.println(result1);System.out.println(result2);}
}

122. 买卖股票的最佳时机 II

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润

示例 1:

输入:prices = [7,1,5,3,6,4]
输出:7
解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3 。总利润为 4 + 3 = 7 。

示例 2:

输入:prices = [1,2,3,4,5]
输出:4
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。总利润为 4 。

解题思路

要计算能获得的最大利润,可以采用贪心算法的思想。贪心算法的核心思想是每一步都选择当前状态下最优的选择,从而希望能够得到全局最优解。

具体解题思路如下:

  1. 遍历股票价格列表,计算相邻两天的价格差,如果价格差为正数,则表示可以在这两天进行交易,并且利润增加。
  2. 将所有正数的价格差相加,即可得到总利润。

代码

public class MaxProfitII {public int maxProfit(int[] prices) {int maxProfit = 0;for (int i = 1; i < prices.length; i++) {if (prices[i] > prices[i - 1]) {maxProfit += prices[i] - prices[i - 1];}}return maxProfit;}public static void main(String[] args) {int[] prices1 = {7, 1, 5, 3, 6, 4};int[] prices2 = {1, 2, 3, 4, 5};MaxProfitII solution = new MaxProfitII();System.out.println(solution.maxProfit(prices1)); // Output: 7System.out.println(solution.maxProfit(prices2)); // Output: 4}
}

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

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

相关文章

提升交付效率:Booking.com 金融技术团队的成功实践

Booking.com 金融技术业务部门的团队对其平台的后端和前端实施了一系列改进措施&#xff0c;并通过 DORA 指标将交付性能提高了一倍。此外&#xff0c;还使用了微前端 (MFE) 模式&#xff0c;将单体 FE 应用程序分解为多个可单独部署的分解应用程序。 2022 年年中&#xff0c;B…

GTC 2024,英伟达官宣四大量子突破

3月18日&#xff0c;英伟达&#xff08;NVIDIA&#xff09;公司宣布推出一项创新的云服务。该服务旨在帮助研究人员和开发人员在化学、生物学和材料科学等关键科学领域&#xff0c;推动量子计算的探索。 英伟达高性能计算和量子计算部门主管蒂姆科斯塔&#xff08;Tim Costa&am…

GIS设计与开发的学习笔记

目录 一、简答题 1.GeoDatabase数据模型结构类型与四种关系。 2.组件式GIS的基本思想是什么&#xff1f; 3.请简述创建空间书签的实现逻辑。 4.请问与地理要素编辑相关的类有哪些&#xff1f;&#xff08;列举至少五个类&#xff09; 5.利用ArcGIS Engine提供的栅格运算工…

恶劣天气对高速公路交通的影响

恶劣天气对高速公路交通的影响 高速低能见度会对安全驾驶造成以下影响&#xff1a; 降低驾驶员的感知能力&#xff1a;在低能见度条件下&#xff0c;驾驶员的视线距离缩短&#xff0c;难以看清周围的环境&#xff0c;包括道路状况、其他车辆和行人等。这会导致驾驶员对周围情况…

蓝桥杯 EDA 组 2023模拟+真题原理图解析

本文解析了标题内的原理图蓝桥杯EDA组真题&#xff0c;2021-2022 省赛真题/模拟题在上一篇文中。本文中重复或者是简单的电路节约篇幅不在赘述。 其中需要补充和计算原理图的题目解析都放在最下面 一、2023 年第十四届省赛模拟题1 1.1 Type-C 接口电路 通过 CH340N 将数据转化为…

解密Mysql数据库引擎:探究其背后的神秘力量(二)

本系列文章简介&#xff1a; 在本系列文章中&#xff0c;我们将从MySQL的基础知识入手&#xff0c;逐步深入到数据库引擎的内部机制。我们将详细介绍MySQL中常用的几种数据库引擎&#xff0c;包括InnoDB、MyISAM等&#xff0c;分析它们的优缺点以及适用场景。同时&#xff0c;我…

MySQL面试复习记录

一、mysql文章地址汇总 以下均为蓝云飘飘的文章&#xff1a; MySQL数据库&#xff08;一&#xff09;_写出sql语句,列出薪资比‘王海涛’的薪资高的所有员工,显示姓名,薪资-CSDN博客 MySQL数据库&#xff08;二&#xff09;_sql里的性别是什么代表-CSDN博客 ★★★★★ My…

Git Flow模型之美:优化团队协作开发流程

流程图 主要分支 master: 永远处在**即将发布(production-ready)状态**&#xff1b; develop: 最新的开发状态&#xff1b; 辅助分支 feature: 开发新功能的分支, 基于 develop, 完成后 merge 回 develop&#xff1b; release: 准备要发布版本的分支, 用来修复 bug. 基于 devel…

x-zse-96,android端,伪dex加固,so加固,白盒AES,字符串加密

x-zse-96,android端,伪dex加固,so加固,白盒AES,字符串加密 上一篇某招聘软件的sig及sp参数被和谐掉了,所以懂得都懂啊! 因为web的api没有那么全,所以来看了下app的,ios的防护几乎没有,纸糊的一样,android端的有点复杂了,到最后我也没能完整的实现整个加密过程,我也只复现到DF…

Hadoop安装部署-单机版

Apache Hadoop是一个使用HDFS&#xff08;Hadoop Distributed File System&#xff09;分布式文件系统执行可靠的、规模化的分布式计算的开源项目&#xff0c;Hadoop是使用Java语言开发&#xff0c;其运行在Linux操作系统上集群规模最大支持几千个分布式节点&#xff0c;本文主…

【嵌入式——QT】QThread创建多线程

【嵌入式——QT】QThread创建多线程 概述主要函数图示代码示例 概述 QThread类提供不依赖于平台的管理线程的方法&#xff0c;一个QThread类的对象管理一个线程&#xff0c;一般从QThread继承一个自定义类&#xff0c;并重定义虚函数run()&#xff0c;在run()函数里实现线程需…

基于java的健身房管理系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本健身房管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

【MySQL】数据库的基础概念

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习计网、mysql和算法 ✈️专栏&#xff1a;MySQL学习 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac…

Redis 更新开源许可证 - 不再支持云供应商提供商业化的 Redis

原文&#xff1a;Rowan Trollope - 2024.03.20 未来的 Redis 版本将继续在 RSALv2 和 SSPLv1 双许可证下提供源代码的免费和宽松使用&#xff1b;这些版本将整合先前仅在 Redis Stack 中可用的高级数据类型和处理引擎。 从今天开始&#xff0c;所有未来的 Redis 版本都将以开…

Vue.js前端开发零基础教学(二)

目录 前言 2.1 单文件组件 2.2 数据绑定 2.2.2 响应式数据绑定 2.3 指令 2.3.1 内容渲染指令 2.3.2 属性绑定指令 ​编辑 2.3.3 事件绑定指令 2.3.4 双向数据绑定指令 2.3.5 条件渲染指令 2.3.6 列表渲染指令 2.4 事件对象 2.5 事件修饰符 学习目标&am…

sentinel使用控制台实现

1、添加依赖 <!--整合控制台--><dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-transport-simple-http</artifactId> <version>1.8.0</version></dependency> 此项方法&#xff0…

HarmonyOS入门学习

HarmonyOS入门学习 前言快速入门ArkTS组件基础组件Image组件Text组件TextInput 文本输入框Buttonslider 滑动组件 页面布局循环控制ForEach循环创建组件 List自定义组件创建自定义组件Builder 自定义函数 状态管理Prop和LinkProvide和ConsumeObjectLink和Observed ArkUI页面路由…

JVM第八讲:GC - Java 垃圾回收基础知识

GC - Java 垃圾回收基础知识 本文是JVM第八讲&#xff0c; Java 垃圾回收基础知识。垃圾收集主要是针对堆和方法区进行&#xff1b;程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的&#xff0c;只存在于线程的生命周期内&#xff0c;线程结束之后也会消失&#xff0…

单片机第四季-第二课:uCos2源码-BSP

1&#xff0c;初始uCos2 文件中uC开头的为uCos相关的。 2&#xff0c;uCos2源码工程建立 建立Source Insight工程 寻找main函数 (1)RTOS其实就是一个大的裸机程序&#xff0c;也是从main开始运行的 (2)main之前也是有一个汇编的启动文件的 (3)main中调用了很多初始化函数 bsp部…

Linux信号补充——信号发送和保存

三、信号的发送与保存 3.1信号的发送 ​ 必须有操作系统来保存信号&#xff0c;因为他是管理者&#xff1b; ​ 信号给进程的task_struct发送信号&#xff0c;在task_struct中维护了一个整数signal有0-31位&#xff0c;共32个bit位&#xff1b;对于信号的管理使用的是位图结…