解决leetcode第3509题.最大化交错和为K的子序列乘积
3509.最大化交错和为K的子序列乘积
难度:困难
问题描述:
给你一个整数数组nums和两个整数k与limit,你的任务是找到一个非空的子序列,满足以下条件:
它的交错和等于k。
在乘积不超过limit的前提下,最大化其所有数字的乘积。
返回满足条件的子序列的乘积。如果不存在这样的子序列,则返回-1。
子序列是指可以通过删除原数组中的某些(或不删除)元素并保持剩余元素顺序得到的新数组。
交错和是指一个从下标0开始的数组中,偶数下标的元素之和减去奇数下标的元素之和。
示例1:
输入:nums=[1,2,3],k=2,limit=10
输出:6
解释:
交错和为2的子序列有:
[1,2,3]
交错和:1-2+3=2
乘积:1*2*3=6
[2]
交错和:2
乘积:2
在limit内的最大乘积是6。
示例2:
输入:nums=[0,2,3],k=-5,limit=12
输出:-1
解释:
不存在交错和恰好为-5的子序列。
示例3:
输入:nums=[2,2,3,3],k=0,limit=9
输出:9
解释:
交错和为0的子序列包括:
[2,2]
交错和:2-2=0
乘积:2*2=4
[3,3]
交错和:3-3=0
乘积:3*3=9
[2,2,3,3]
交错和:2-2+3-3=0
乘积:2*2*3*3=36
子序列[2,2,3,3]虽然交错和为k且乘积最大,但36>9,超出limit。下一个最大且在limit范围内的乘积是9。
提示:
1<=nums.length<=150
0<=nums[i]<=12
-105<=k<=105
1<=limit<=5000
问题分析:
这个问题的关键是如何找出一个列表的所有子序列,又要用到递归的方法。在找出所有的子序列之后,遍历每一个子序列,计算其交错和及元素的乘积,检验其交错和是否等给定的k值,元素的乘积是否小于等于limit的值,最后将其中最大的元素乘积求出。
为此设计了这些函数:
计算交错和函数 get_interleaved_sum(a)
计算列表中元素乘积函数 get_product(a)
找到列表中所有元素的子序列函数 get_nonnull_subsequence(a)
从列表a中找出非空子序列的最大乘积函数 get_max_product_subsequence(a,k,limit)
程序如下:
#计算列表a的交错和并返回
def get_interleaved_sum(a):b=a[::2]c=a[1::2]return sum(b)-sum(c)#计算列表a的元素乘积并返回
def get_product(a):s=1for i in a:s*=ireturn s#找出列表a的所有子序列并返回
def get_nonnull_subsequence(a):n=len(a)if n==1:return [a]elif n==2:return [[a[0]],[a[1]],a]else:b=get_nonnull_subsequence(a[1:])d=[[a[0]]]d.extend(b)for i in b:c=[a[0]]+id.append(c)d.sort(key=lambda x:(len(x),x))return d#从列表a中找出具有最大乘积的非空子序列找返回
def get_max_product_subsequence(a,k,limit):a=get_nonnull_subsequence(a)print('生成的所有子序列:',a)s=0for i in a:print('子序列:',i)t=get_interleaved_sum(i)l=get_product(i)print(f'{i}的交错和为:{t},{i}的元素乘积为:{l}')if t==k and s<l<=limit:s=lreturn -1 if s==0 else s#主程序
nums=eval(input('pls input nums='))
k=int(input('pls input k='))
limit=int(input('pls input limit='))
s=get_max_product_subsequence(nums,k,limit)
print(f'最大乘积为:{s}' if s!=-1 else '没有找出满足条件的子序列!')
运行实例一
pls input nums=[2,3,4,5]
pls input k=-2
pls input limit=130
生成的所有子序列: [[2], [3], [4], [5], [2, 3], [2, 4], [2, 5], [3, 4], [3, 5], [4, 5], [2, 3, 4], [2, 3, 5], [2, 4, 5], [3, 4, 5], [2, 3, 4, 5]]
子序列: [2]
[2]的交错和为:2,[2]的元素乘积为:2
子序列: [3]
[3]的交错和为:3,[3]的元素乘积为:3
子序列: [4]
[4]的交错和为:4,[4]的元素乘积为:4
子序列: [5]
[5]的交错和为:5,[5]的元素乘积为:5
子序列: [2, 3]
[2, 3]的交错和为:-1,[2, 3]的元素乘积为:6
子序列: [2, 4]
[2, 4]的交错和为:-2,[2, 4]的元素乘积为:8
子序列: [2, 5]
[2, 5]的交错和为:-3,[2, 5]的元素乘积为:10
子序列: [3, 4]
[3, 4]的交错和为:-1,[3, 4]的元素乘积为:12
子序列: [3, 5]
[3, 5]的交错和为:-2,[3, 5]的元素乘积为:15
子序列: [4, 5]
[4, 5]的交错和为:-1,[4, 5]的元素乘积为:20
子序列: [2, 3, 4]
[2, 3, 4]的交错和为:3,[2, 3, 4]的元素乘积为:24
子序列: [2, 3, 5]
[2, 3, 5]的交错和为:4,[2, 3, 5]的元素乘积为:30
子序列: [2, 4, 5]
[2, 4, 5]的交错和为:3,[2, 4, 5]的元素乘积为:40
子序列: [3, 4, 5]
[3, 4, 5]的交错和为:4,[3, 4, 5]的元素乘积为:60
子序列: [2, 3, 4, 5]
[2, 3, 4, 5]的交错和为:-2,[2, 3, 4, 5]的元素乘积为:120
最大乘积为:120
运行实例二
pls input nums=[3,4,5]
pls input k=-1
pls input limit=20
生成的所有子序列: [[3], [4], [5], [3, 4], [3, 5], [4, 5], [3, 4, 5]]
子序列: [3]
[3]的交错和为:3,[3]的元素乘积为:3
子序列: [4]
[4]的交错和为:4,[4]的元素乘积为:4
子序列: [5]
[5]的交错和为:5,[5]的元素乘积为:5
子序列: [3, 4]
[3, 4]的交错和为:-1,[3, 4]的元素乘积为:12
子序列: [3, 5]
[3, 5]的交错和为:-2,[3, 5]的元素乘积为:15
子序列: [4, 5]
[4, 5]的交错和为:-1,[4, 5]的元素乘积为:20
子序列: [3, 4, 5]
[3, 4, 5]的交错和为:4,[3, 4, 5]的元素乘积为:60
最大乘积为:20
运行实例三
pls input nums=[5,7,9]
pls input k=6
pls input limit=20
生成的所有子序列: [[5], [7], [9], [5, 7], [5, 9], [7, 9], [5, 7, 9]]
子序列: [5]
[5]的交错和为:5,[5]的元素乘积为:5
子序列: [7]
[7]的交错和为:7,[7]的元素乘积为:7
子序列: [9]
[9]的交错和为:9,[9]的元素乘积为:9
子序列: [5, 7]
[5, 7]的交错和为:-2,[5, 7]的元素乘积为:35
子序列: [5, 9]
[5, 9]的交错和为:-4,[5, 9]的元素乘积为:45
子序列: [7, 9]
[7, 9]的交错和为:-2,[7, 9]的元素乘积为:63
子序列: [5, 7, 9]
[5, 7, 9]的交错和为:7,[5, 7, 9]的元素乘积为:315
没有找出满足条件的子序列!
运行实例四
pls input nums=[6]
pls input k=6
pls input limit=30
生成的所有子序列: [[6]]
子序列: [6]
[6]的交错和为:6,[6]的元素乘积为:6
最大乘积为:6
在leetcode的问题中,涉及到排列组合问题的解决,主要包括这样一些:
- 求一个列表的全排列问题
- 求一个列表的所有子数组问题
- 求一个列表n个元素中任取m个元素组成全排列的问题
- 求一个列表所有子序列的问题
这些问题的解决基本上都用到了递归的方法,反复研究其解决过程,能够更深刻领会递归原理和对列表的处理。
相关文章:
解决leetcode第3509题.最大化交错和为K的子序列乘积
3509.最大化交错和为K的子序列乘积 难度:困难 问题描述: 给你一个整数数组nums和两个整数k与limit,你的任务是找到一个非空的子序列,满足以下条件: 它的交错和等于k。 在乘积不超过limit的前提下,最大…...

【Python 深度学习】1D~3D iou计算
一维iou 二维 import numpy as npdef iou_1d(set_a, set_b):# 获得集合A和B的边界 x1, x2 set_ay1, y2 set_b# 计算交集的上下界low max(x1,y1)high - min(x2, y2)# 计算交集if high - low < 0:inter 0else:inter high - low# 计算并集union (x2 -x1) (y2 - y1) - in…...

java23
1.美化界面 添加背景图片 所以我们添加背景图片要放在后面添加 添加图片边框 绝对路径: 相对(模块)路径: 第一个是绝对路径,第二个是相对路径,但是斜杠的方向不对 总结: 2.图片移动 先实现KeyListener接口…...
嵌入式工程师常用软件
1、 Git Git 是公司常用的版本管理工具,人人都要会。在线的 git 教程可以参考菜鸟教程: https://www.runoob.com/git/git-tutorial.html 电子书教程请在搜索栏搜索: git Git 教程很多,常用的命令如下,这些命令可…...

LitCTF2025 WEB
星愿信箱 使用的是python,那么大概率是ssti注入 测试{{5*5}} 发现需要包含文字,那么添加文字 可以看到被waf过滤了,直接抓包查看参数上fenjing 可以看到这里是json格式,其实fenjing也是支持json格式的 https://github.com/Marv…...
Redisson WatchDog会一直续期吗?
取决于加锁的方式。 Lock 方法有2种形式,如果指定了leaseTime (且不为-1), 不会启用watchDog机制. 如果没有指定leaseTime, 则会启动watchDog机制,且会一直续期,除非线程宕调或者续期失败。 p…...

Linux 下VS Code 的使用
这里以创建helloworld 为例。 Step 0:准备工作: Install Visual Studio Code. Install the C extension for VS Code. You can install the C/C extension by searching for c in the Extensions view (CtrlShiftX). Step 1: 创建工作目录 helloworld࿰…...
Android开发namespace奇葩bug
Android开发namespace奇葩bug namespace "com.yibanxxx.yiban"buildFeatures {buildConfig true}namespace 对应你的module的清单下的package...
watchEffect
在处理复杂异步逻辑时,Vue 3 的 watchEffect 相比传统的 watch 具有以下优势: 1. 自动追踪依赖 watchEffect 会自动收集其回调中使用的所有响应式依赖,无需手动指定监听源: import { ref, watchEffect } from vue;const count …...

Qt 布局管理器的层级关系
1、HomeWidget.h头文件: #ifndef HOMEWIDGET_H #define HOMEWIDGET_H#include <QWidget> #include <QPushButton> #include <QVBoxLayout> #include <QHBoxLayout>class HomeWidget : public QWidget {Q_OBJECTpublic:HomeWidget(QWidget …...
Android 之 kotlin 语言学习笔记一
参考官方文档:https://developer.android.google.cn/kotlin/learn?hlzh-cn 1、变量声明 Kotlin 使用两个不同的关键字(即 val 和 var)来声明变量。 val 用于值从不更改的变量。使用 val 声明的变量无法重新赋值。var 用于值可以更改的变量…...

maven模块化开发
使用方法 将项目安装到本地仓库 mvn install 的作用 运行 mvn install 时,Maven 会执行项目的整个构建生命周期(包括 compile、test、package 等阶段),最终将构建的 artifact 安装到本地仓库(默认路径为 ~/.m2/repos…...
为什么要使用stream流
总的来说就是 它支持链式调用,方便 不会修改原始数据源,而是生成一个新的流或结果 中间操作不会立即执行,只有在终端操作触发时才会真正执行 注意事项 无状态操作:Stream 操作应该是无状态的,不要依赖外部变量的状…...
语义分割的image
假设图像的尺寸为 3x3,并且是 RGB 图像(有 3 个通道)。每个通道的像素值范围为 [0, 1],我们将构造一个 batch_size 2 的图像批次。 Image: tensor([[[[0.1347, 0.4583, 0.7102], # 第一张图像的红色通道[0.1774, 0.0328, 0.308…...

云原生安全之网络IP协议:从基础到实践指南
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 IP协议(Internet Protocol)是互联网通信的核心协议族之一,负责在设备间传递数据包。其核心特性包括&…...

C++——QT 文件操作类
QFile 概述 QFile是Qt框架中用于文件操作的类(位于QtCore模块),继承自 QIODevice,提供文件的读写、状态查询和路径管理功能。它与 QTextStream、QDataStream 配合使用,可简化文本和二进制数据的处理,并具备…...
【排错】kylinLinx环境python读json文件报错UTF-8 BOM
kylin Linux环境python读json文件报错UTF-8 BOM 报错描述: windows环境下,python代码读取json文件正常,但是sftp到linux环境下 报错信息: json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column …...

[spring] spring 框架、IOC和AOP思想
目录 传统Javaweb开发的困惑 loC、DI和AOP思想提出 Spring框架的诞生 传统Javaweb开发的困惑 问题一:层与层之间紧密耦合在了一起,接口与具体实现紧密耦合在了一起 解决思路:程序代码中不要手动new对象,第三方根据要求为程序提…...
LInux—shell编程
一、Shell 编程核心特性 解释型语言 无需编译,直接由 bash、sh 等解释器逐行执行。 类似 PHP 的解释执行,不同于 C 的编译型。 系统命令集成 可直接调用 Linux 命令(如 ls、grep、awk),实现系统管理自动化。 与 C/…...

尚硅谷redis7 37-39 redis持久化之AOF简介
37 redis持久化之AOF简介 AOF 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工…...

GitLab 备份所有仓库(自动克隆)
一、准备工作 1. 环境要求 已安装 Git(版本 2.10)本地磁盘空间充足(根据仓库总大小预估)已配置 SSH 密钥到 GitLab(推荐方式) 2. 获取 GitLab API 访问权限 登录 GitLab,点击右上角头像 → …...

[浏览器]缓存策略机制详解
在做页面性能优化的时候,有一个点容易被忽略,那就是资源缓存优化。 浏览器里缓存策略分为强缓存,协商缓存以及不缓存,每个缓存策略都有其适用的优化场景。 下面为大家详解何为强缓存,协商缓存 先说结论强缓>协商&g…...
Vue修饰符全解析
目录 一、事件修饰符 二、按键修饰符 三、系统修饰键 四、表单修饰符 五、鼠标修饰符 六、特殊修饰符 七、自定义修饰符 使用建议 一、事件修饰符 <!-- 阻止冒泡 --> <button click.stop"handleClick">点击测试</button><!-- 阻止默认行…...

OpenCV CUDA 模块图像过滤-----创建一个计算图像导数的滤波器函数createDerivFilter()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::createDerivFilter 是 OpenCV CUDA 模块中的一个工厂函数,用于创建一个计算图像导数的滤波器。这个滤波器可以用来计算图像…...
计算机视觉与深度学习 | Python实现CEEMDAN-ABC-VMD-DBO-CNN-LSTM时间序列预测(完整源码和数据)
以下是一个结合CEEMDAN、ABC优化VMD、DBO优化CNN-LSTM的完整时间序列预测实现方案。该方案包含完整的数据生成、算法实现和模型构建代码。 完整实现代码 import numpy as np import pandas as pd from PyEMD import CEEMDAN from vmdpy import VMD from sklearn.preprocessing…...

AWS関連職種向け:日本語面接QA集
1. 自己紹介(じこしょうかい) Q:簡単に自己紹介をお願いします。 A: はい、〇〇と申します。これまで約4年間、主にAWSを基盤としたインフラ設計・構築・運用に従事してまいりました。VPCやEC2、RDS、S3などの基本サービスの設計…...
【Macos】安装前端环境rust+node环境
Macos 安装前端环境 1、findar 新建目录 projects 2、安装brew 使用中科大镜像, 手动配置path 3、brew install git 4、 git clone githttp://10.10.9.201/software/dreame_sorting_app.git 5、安装vscode/hbuilderx/node 6、rustup切换镜像并安装https://rsproxy.cn/#getStart…...

(01)华为GaussDB((基于PostgreSQL))高斯数据库使用记录,dbeaver客户端配置高斯驱动,连接高斯数据库
高斯数据库是华为推出的一款基于PostgreSQL的企业级数据库产品,客户端使用通用的dbeaver dbeaver客户端配置高斯驱动 建议使用 dbeaver24.3.1及以上客户端,选择模式后执行sql会绑定模式名,如果使用dbeaver23.2版本,选择模式后执…...

ARM Linux远程调试
准备 虚拟机既能ping通开发板,又能ping通外网,还要能ping通Windows主机(如果你有上位机通信(tftp、vsftp、ssh)的需求) VMware 添加网络适配器2用作桥接网卡,原有的网络适配器保持为NAT模式 打开虚拟网络编辑器,配置VMnet0为桥接模式,外部连接设置为Realtek PCIe G…...

day24Node-node的Web框架Express
1. Express 基础 1.1 什么是Express node的web框架有Express 和 Koa。常用Express 。 Express 是一个基于 Node.js 的快速、极简的 Web 应用框架,用于构建 服务器端应用(如网站后端、RESTful API 等)。它是 Node.js 生态中最流行的框架之一,以轻量、灵活和易用著称。 …...