【LeetCode:3098. 求出所有子序列的能量和 + 记忆化缓存】

news2024/9/23 6:24:39

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 记忆化缓存
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 3098. 求出所有子序列的能量和

⛲ 题目描述

给你一个长度为 n 的整数数组 nums 和一个 正 整数 k 。

一个 子序列 的 能量 定义为子序列中 任意 两个元素的差值绝对值的 最小值 。

请你返回 nums 中长度 等于 k 的 所有 子序列的 能量和 。

由于答案可能会很大,将答案对 109 + 7 取余 后返回。

示例 1:

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

输出:4

解释:

nums 中总共有 4 个长度为 3 的子序列:[1,2,3] ,[1,3,4] ,[1,2,4] 和 [2,3,4] 。能量和为 |2 - 3| + |3 - 4| + |2 - 1| + |3 - 4| = 4 。

示例 2:

输入:nums = [2,2], k = 2

输出:0

解释:

nums 中唯一一个长度为 2 的子序列是 [2,2] 。能量和为 |2 - 2| = 0 。

示例 3:

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

输出:10

解释:

nums 总共有 3 个长度为 2 的子序列:[4,3] ,[4,-1] 和 [3,-1] 。能量和为 |4 - 3| + |4 - (-1)| + |3 - (-1)| = 10 。

提示:

2 <= n == nums.length <= 50
-108 <= nums[i] <= 108
2 <= k <= n

🌟 求解思路&实现代码&运行结果


⚡ 记忆化缓存

🥦 求解思路
  1. 理解题目的意思,其实就是让我们找到所有长度为k子序列(递归),然后求解每种子序列中任意俩个数绝对差最小的结果返回,累加所有绝对差并返回。
  2. 注意:子序列是有序的,但是收集最小差的过程是任意的,所有数组的顺序就对最终的结果没有影响,我们可以先对数组进行排序。
  3. 第一种思路:设计一个递归,从i位置开始,搜集k个数,收集的每个数使用list收集,最后判断最小值返回。但是时间超限,缓存也超时,递归设计的有问题,继续修改递归。
  4. 第二种思路,依然设计一个递归,从i位置开始,收集k个数,pre表示之前选择的数,min表示该递归路径下的最小差值,递归超时,缓存通过。
  5. 有了基本的思路,接下来我们就来通过代码来实现一下的解法。
🥦 实现代码
class Solution {

    private final int mod = (int) 1e9 + 7;
    private HashMap<String, Long> map = new HashMap<>();

    public int sumOfPowers(int[] nums, int k) {
        int n = nums.length;
        Arrays.sort(nums);
        return (int) process(0, nums, k, -1, Integer.MAX_VALUE);
    }

    public long process(int index, int[] nums, int k, int pre, int min) {
        if (index >= nums.length) {
            return k == 0 ? min : 0;
        }
        if (k > nums.length - index) {
            return 0;
        }
        String key = index + "#" + k + "#" + pre + "#" + min;
        if (map.containsKey(key)) {
            return map.get(key);
        }
        long p1 = process(index + 1, nums, k, pre, min) % mod;
        long p2 = process(index + 1, nums, k - 1, index, pre == -1 ? min : Math.min(nums[index] - nums[pre], min))
                % mod;
        map.put(key, (p1 + p2) % mod);
        return (p1 + p2) % mod;
    }
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

JUC-synchorized与锁原理、锁的升级与膨胀

syn-ed 是一个可重入、不公平的重量级锁&#xff1b;synchronized使用对象锁保证了临界区代码的原子性&#xff0c;无论使用synchorized锁的是代码块还是方法&#xff0c;其本质都是锁住一个对象。 同步代码块&#xff0c;锁住的是括号里的对象同步方法 普通方法&#xff0c;…

手写文件系统一条龙篇

哈喽&#xff0c;我是子牙老师。这篇文章聊聊文件系统是怎么写出来的&#xff0c;看完&#xff0c;你就可以自己去写文件系统了。本文以Linux的EXT系列文件系统为例进行讲解&#xff0c;理解了&#xff0c;其他的文件系统你就可以自行研究了&#xff0c;差不多的东西 理解了本…

第二证券:市场估值依然处于较低区域

结合风格板块、一级工作预喜情况与工作中预喜崎岖较大的企业体现看&#xff0c;估量2024年上半年中下游工作获利改善势头向好。其中&#xff0c;获益于客运量的上升&#xff0c;交通运输工作中大型蓝筹公司盈余才干改善。TMT领域中电子及通讯工作成果上升崎岖较大&#xff0c;工…

微服务分布式事务

1、分布式事务是什么&#xff1f; 微服务架构中的分布式事务是指在多个服务实例之间保持数据一致性的机制。由于微服务通常涉及将业务逻辑拆分成独立的服务&#xff0c;每个服务可能有自己的数据库&#xff0c;因此当一个业务操作需要跨多个服务进行时&#xff0c;确保所有服务…

小白速通 Spring 之 Annotation 篇

Annotation 注解 Service public class MessageServiceImpl implements MessageService{public String getMessage() {return "Hello World!";}} 本质上来说 Annotation(注解)是 Java 推出的一种注释机制,后面我们统一叫 Annotation&#xff0c;和普通的注释有个显…

Python设计模式:巧用元类创建单例模式!

✨ 内容&#xff1a; 今天我们来探讨一个高级且实用的Python概念——元类&#xff08;Metaclasses&#xff09;。元类是创建类的类&#xff0c;它们可以用来控制类的行为。通过本次练习&#xff0c;我们将学习如何使用元类来实现单例模式&#xff0c;确保某个类在整个程序中只…

python-首字母移位(PythonTip)

[题目描述] 编写一个程序&#xff0c;将句子中每个单词的首字母移位到下一个单词。定义函数shift_first_letter()&#xff0c;参数为sentence&#xff08;字符串&#xff09;。在函数内&#xff0c;将句子中每个单词的首字母移位到下一个单词。最后一个单词的首字母移位到句子的…

Hadoop架构

一、案列分析 1.1案例概述 现在已经进入了大数据(Big Data)时代&#xff0c;数以万计用户的互联网服务时时刻刻都在产生大量的交互&#xff0c;要处理的数据量实在是太大了&#xff0c;以传统的数据库技术等其他手段根本无法应对数据处理的实时性、有效性的需求。HDFS顺应时代…

【机器学习】模型验证曲线(Validation Curves)解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 模型验证曲线(Validation Curves)解析什么是模型验证曲线?模型验证曲线的解读模…

Django教程(004):基于orm操作数据库的用户管理实现

文章目录 1、功能需求2、展示用户列表2.1 添加url2.2 创建视图2.3 编写html页面 3、添加用户3.1 添加url3.2 跳转到添加页面3.3 编写添加用户页面3.4 添加用户3.5 实现效果3.6 页面优化 4、删除用户4.1 添加删除用户按钮4.2 添加删除url4.3 删除用户4.4 实现效果 5、完整代码链…

vue3使用html2canvas

安装 yarn add html2canvas 代码 <template><div class"container" ref"container"><div class"left"><img :src"logo" alt"" class"logo"><h2>Contractors pass/承包商通行证&l…

StableDiffusion模型推荐系列(风格型)

今天&#xff0c;分享几个SDXL的特殊风格模型&#xff0c;这些模型在特定风格下非常出彩&#xff0c;弥补了一些“我已经看腻了AI画图”的情况。这几位作者分享的SDXL模型艺术风格上表现得尤为出色&#xff0c;而且他们都是秉持着开源精神免费分享自己的模型。训练过模型的小伙…

掌握VR全景技术,需要具备哪些条件?

VR全景技术自从进入市场以来&#xff0c;就在各个行业领域尝试落地运用&#xff0c;包括但不限于广告宣传、学校教育、医疗、工业、农业等领域。随着5G 技术的不断普及&#xff0c;VR全景技术也逐渐被应用到日常生活中的各个方面&#xff0c;从地产中介到车企销售&#xff0c;从…

单周期CPU(三)译码模块(minisys)(verilog)(vivado)

timescale 1ns / 1ps //module Idecode32 (input reset,input clock,output [31:0] read_data_1, // 输出的第一操作数output [31:0] read_data_2, // 输出的第二操作数input [31:0] Instruction, // 取指单元来的指令input [31:0] …

ubuntu配置ssh服务器详解

① 确定Ubuntu是否安装SSH服务 systemctl status ssh 一般最开始都没有ssh服务 ② 安装SSH Server sudo apt install openssh-server 执行过程如下 ③ 确定Ubuntu SSH服务状态 systemctl status ssh 现在能看到&#xff1a; 第一行加载状态&#xff0c;已加载ssh.service文件…

大语言模型-GPT-Generative Pre-Training

一、背景信息&#xff1a; GPT是2018 年 6 月由OpenAI 提出的预训练语言模型。 GPT可以应用于复杂的NLP任务中&#xff0c;例如文章生成&#xff0c;代码生成&#xff0c;机器翻译&#xff0c;问答对话等。 GPT也采用两阶段的训练过程&#xff0c;第一阶段是无监督的方式来预训…

使用 Redis 实现验证码、token 的存储,用自定义拦截器完成用户认证、并使用双重拦截器解决 token 刷新的问题

基于session实现登录流程 1.发送验证码 用户在提交手机号后&#xff0c;会校验手机号是否合法&#xff0c;如果不合法&#xff0c;则要求用户重新输入手机号 如果手机号合法&#xff0c;后台此时生成对应的验证码&#xff0c;同时将验证码进行保存&#xff0c;然后再通过短信…

Python爬虫实战案例(爬取图片)

爬取图片的信息 爬取图片与爬取文本内容相似&#xff0c;只是需要加上图片的url&#xff0c;并且在查找图片位置的时候需要带上图片的属性。 这里选取了一个4K高清的壁纸网站&#xff08;彼岸壁纸https://pic.netbian.com&#xff09;进行爬取。 具体步骤如下&#xff1a; …

Android 性能之刷新率设置和管理

目录 1. 刷新率和帧率 2. 多种刷新率 3. 基本原理 3.1 屏幕 & 显示控制器 3.2 Composer Service 4. Framework 策略 4.1基本架构 4.2 刷新率设置项的定义 4.2.1 最低刷新率 4.2.2 默认刷新率 & 默认的用户设置刷新率 4.2.2.1 设置入口 4.2.2.2 设置场景 4…

Matlab画不同指标的对比图

目录 一、指标名字可修改 二、模型名字可修改 三、输入数据可修改 软件用的是Matlab R2024a。 clear,clc,close all figure1figure(1); % set(figure1,Position,[300,100,800,600],Color,[1 1 1]) axes1 axes(Parent,figure1);%% Initialize data points 一、指标名字可修…