leetcode 1658. 将 x 减到 0 的最小操作数(优质解法)

news2024/12/23 4:15:12

代码:

class Solution {
    public int minOperations(int[] nums, int x) {
        int sum=0;  // nums 数组中的数据总和
        int length=nums.length;
        for(int i=0;i<length;i++){
            sum+=nums[i];
        }

        int target=sum-x;   //待查找的子数组的和
        if(target<0){
            return -1;
        }

        //采用滑动窗口的方法查找合适的子数组
        int maxLrngth=-1;   //记录子数组的最大长度
        int sonSum=0;   //记录当前讨论的子数组的和
        for (int left=0,right=0;right<length;right++){
            sonSum+=nums[right];
            while (sonSum>target){
                sonSum-=nums[left++];
            }
            if(sonSum==target){
                //此时 left 和 right 指针之间的子数组符合条件
                //记录当前子数组的长度
                maxLrngth=Math.max(maxLrngth,right-left+1);
            }
            //sonSum < target
        }

        if(maxLrngth==-1){
            return maxLrngth;
        }

        return nums.length-maxLrngth;
    }
}

题解:

        我们直接分析题意的话会发现这个题目还是很复杂的,因为我们不能确定当前是要让 x 减去左边的值还是右边的值,也不能确定当前的选择是否是最佳的选择,当我们觉得题目当前问的问题很复杂时,我们不妨换个方向来看这个问题

        我们要移除最左边或者最右边的元素,让 x 的值减为 0 ,就相当于,我们要选取最左边或最右边的值,让选取的值相加为 x ,由于我们只从最左或最右边开始选取,这就代表,选取值以后,剩下没有被选取的值是连续的,说明是原数组的一个子数组

        于是我们可以这样看题,现在需要我们从该数组中找到一个子数组,让子数组的和 target = sum(数组的总和)- x ,并且子数组的长度要最长(因为操作数要最小)

        这样的话题目就简单很多了,对于讨论子数组的题,我们通常可以采用滑动窗口的方式解决,现在思考一下暴力解法:我们找到数组中所有的子数组,筛选出和为 target 的子数组,最后选择最长的子数组便得到了结果

        以示例1作为例子,输入:nums = [1,1,4,2,3], x = 5,target = 11-5 = 6我们让指针 L 和 R 指向下标 0 ,L 和 R 指针之间的数据便是我们要讨论的子数组,当 子数组的和小于 target 时,我们让 R ++ ,扩大我们讨论的子数组

1        1        4        2        3

L

R

        当 R 指针指到当前位置时,我们讨论的子数组的和为 6 == target ,所以此时的子数组是符合条件的,我们将子数组的长度进行保存(与之前保存的长度进行比较,取较大的保存),此时以 L 指针为首位的子数组已经讨论完毕,我们让 L++

1        1        4        2        3

L

                    R   

        现在就涉及到一个问题,我们需要让 R 指针回到 L 指针所在的位置,从头开始讨论子数组吗?答案是:不需要,因为 R 指针在上一轮中到达当前的位置就代表, R 指针左边的数据之和是小于 target 的,即使 R 指针回到 L 指针所在的位置,也会回到当前的位置,所以没有必要回去

        我们直接判断当前子数组的和,此时和为 5 < target ,

1        1        4        2        3

           L     

                    R 

        于是我们让 R ++ ,扩大我们讨论的子数组,此时子数组的和为 7 > target,代表以 L 指针为首位的子数组已经讨论完毕

1        1        4        2        3

           L     

                              R 

        于是我们让 L++,接下来就是循环上面提到的操作了

1        1        4        2        3

                    L           

                              R 

        当 R 指针移动到 nums.length 的位置时,循环结束,讨论完毕

1        1        4        2        3

                              L                 

                                              R 

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

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

相关文章

数据结构与算法编程题42

试编写一个算法&#xff0c;判断给定的二叉树是否是二叉排序树。 //参考博客:https://blog.csdn.net/weixin_44162361/article/details/119112155 #define _CRT_SECURE_NO_WARNINGS #include <iostream>//二叉排序树&#xff08;Binary Sort Tree&#xff0c; BST&#x…

Screenshot To Code

序言 对于GPT-4我只是一个门外汉&#xff0c;至于我为什么要了解screenshot to code&#xff0c;只是因为我想知道&#xff0c;在我不懂前端设计的情况下&#xff0c;能不能通过一些工具辅助自己做一些简单的前端界面设计。如果你想通过此文深刻了解GPT-4或者该开源项目&#…

电气火灾监控系统

电气火灾监控系统是一种用于预防电气火灾的监控解决方案&#xff0c;可以实时监控电气线路和设备的运行状态&#xff0c;及时发现和处理潜在的电气火灾安全隐患。 该系统的主要功能和优势包括&#xff1a; 实时监控&#xff1a;电气火灾监控系统可以实时监控电气线路和设备的电…

Vue学习计划-Vue2--Vue核心(二)Vue代理方式

Vue data中的两种方式 对象式 data:{}函数式 data(){return {} }示例&#xff1a; <body><div id"app">{{ name }} {{ age}} {{$options}}<input type"text" v-model"value"></div><script>let vm new Vue({el: …

html实现好看的个人博客留言板源码

文章目录 1.设计来源1.1 博客主界面1.2 常用源码1.3 我的文章1.4 留言板1.5 联系我 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134837482 html实现好看的个人博客留言…

数据结构与算法编程题41

线性表中各结点的检索概率不等时&#xff0c;可用如下策略提高顺序检索的效率&#xff1a; 若找到指定的结点&#xff0c;则将该结点和其前驱结点&#xff08;若存在&#xff09;交换&#xff0c;使得经常被检索 的结点尽量位于表的前端。试设计在顺序结构的线性表上实现上述策…

实现个微群聊机器人的二次开发

请求URL&#xff1a; http://域名/finderUserHome 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wId是String登录实例标识userName是Str…

Java抽象类(abstract class)和接口(interface)的区别——面试

1.抽象类&#xff08;abstract class&#xff09;和接口&#xff08;interface&#xff09;的区别&#xff1a; 抽象类可以有构造方法&#xff0c;接口中不能有构造方法。 抽象类中可以有普通成员变量&#xff0c;接口中没有普通成员变量。抽象类中可以包含非抽象的普通方法&am…

m1源码编译xgboost的动态链接库dylib

1、下载源码 git clone --recursive https://github.com/dmlc/xgboost cd xgboost拉取源码时候&#xff0c;一定要加"--recursive"这个命令。把它的字模块也要拉取下来&#xff0c;才能编译成功 2、安装c依赖 必要的依赖项(不然后续编译时报错)&#xff0c;包括CM…

微信小程序模板选择指南:如何找到靠谱的平台?

随着移动互联网的快速发展&#xff0c;越来越多的企业和商家都在微信小程序上开展业务。而他们也希望可以通过微信小程序模板快速搭建小程序&#xff0c;那么如何才能找到一个靠谱的微信小程序模板平台呢&#xff1f;下面给大家简单讲解一下。 首先要知道的是&#xff0c;微信小…

我一人全干!之vue3后台管理中的大屏展示。

使用大屏展示的时候有很多种场景&#xff0c;众多场景都是为了实现大屏自适应。 大屏&#xff0c;顾名思义&#xff0c;就是放在一个固定的屏幕上看的&#xff0c;即使你不做自适应&#xff0c;放在一个固定的屏幕上看也没啥问题&#xff0c;但是很多做大屏的是为了在PC端看&am…

LeetCode Hot100 994.腐烂的橘子

题目&#xff1a; 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回…

电商早报 | 12月6日| 1688平台11月GMV增长近25%

1688平台11月GMV增长近25% 12月5日消息&#xff0c;1688发文称&#xff0c;在1688的买家里&#xff0c;25至30岁的“Z世代”占比近50%&#xff0c;30至35岁的“新中产”占比近45%&#xff1b;另外&#xff0c;2023年11月&#xff0c;1688平台GMV增长近25%&#xff0c;日均买家…

菜鸟驿站寄快递真的能省钱吗?还不如去闪侠惠递快递折扣平台下单!

小伙伴们&#xff0c;你们知道我们平常去寄快递发快递的菜鸟驿站是怎么来的吗&#xff1f;今天小编就来带你一探究竟。 那么到菜鸟驿站寄快递真的能省钱吗&#xff1f;其实也不一定。在菜鸟驿站&#xff0c;工作人员称重之后&#xff0c;工作人员说多少就是多少&#xff0c;没…

JavaSE基础50题:6. 求出0~999之间的所有“水仙花数”并输出

概念 “水仙花数”是指一个三位数&#xff0c;其各位数字的立方和确好等于该数本身。 如&#xff1a;153 135333,则153是一个“水仙花数”。 【方法】 如何获得每一位的数&#xff1a;如(153) 个位: 153 % 10 3 十位: 153 / 10 15 15 % 10 5 百位: 153 / 100 1 代码 pu…

Failed to connect to github.com port 443 after 21055 ms: Timed out

目前自己使用了梯*子还是会报这样的错误&#xff0c;连接不到的github。 查了一下原因&#xff1a; 是因为这个请求没有走代理。 解决方案&#xff1a; 设置 -> 网络和Internet -> 代理 -> 编辑 记住这个IP和端口 使用以下命令&#xff1a; git config --global h…

SAP MM 中的业务伙伴确定配置

这篇博客文章将概述 SAP MM 供应商帐户组中的合作伙伴确定是什么以及如何在 S/4 系统中配置它。 本文将指导您完成分步过程&#xff0c;并为您提供有关在供应商主数据中使用合作伙伴确定的完整想法。 合作伙伴角色 供应商在 SAP 中扮演着不同类型的角色&#xff0c;让我们通…

金和OA saveAsOtherFormatServlet接口任意文件上传漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 1. 产品简介 金和数字化智能办公平台&#xff08;简称JC6&#xff09;…

css:flex布局中子元素高度height没有达到100%

目录 问题flex布局示例解决办法方式一方式二 参考 问题 css中使用flex布局中子元素高度height没有达到100% flex布局示例 希望实现两个盒子左右分布&#xff0c;内容垂直居中对齐 <style>.box {display: flex;align-items: center;border: 1px solid #eeeeee;}.box-l…

人事档案管理系统设计与实现

摘 要 进入21世纪&#xff0c;已经步入了信息时代。单位的现代化管理也应该与时俱进。目前&#xff0c;企业的人事档案管理系统信息化已经越来越受到企业的重视。本项目立足于实习调查&#xff0c;严格按照学校毕设的规章制度&#xff0c;做到实事求是。本课题研究目的是&…