【滑动窗口】“正难则反法” 解决最小操作数的问题

本文解析了一道编程题目,通过正难则反法将问题转化为寻找数组中和为目标值的最长子数组的长度,利用滑动窗口技巧实现,讨论了代码实现细节和复杂度分析。

在这里插入图片描述

Problem: 1658. 将 x 减到 0 的最小操作数

题目解析

首先我们来解读一下本题的题目含义

  • 题目会给到我们一个整数数组和一个整数x,我们可以从左侧,也可以从右侧去减,只要让这个x最终减到【0】即可。
  • 不过呢既然可以从左边也可以从右边减的话就一定存在多种方案,我们所需要的话是操作次数最少的那次,看到下面我列出来的两种情况,很明显第二种方法 从右侧删去两个数据更加优的

1.jpg

算法原理分析

接下去我们来介绍一下本题的算法原理

  • 通过刚才的分析相信很多小伙伴认为本题的题目意思并不是很难理解,但是呢想找到对应的解决方案还是比较困难的,在这里的话教大家一种方法叫做 “正难则反法"
  • 题目中要我们去找的是左右两侧的 最小操作数,但是呢这并不好计算,于是我们可以换个思路,将左侧的数据看做是一个整体,记为a;将右侧的数据看做是一个整体,记为b;那么我们可以得出a + b = x
  • 既然左右两侧的是x的话,那么中间的一段就是sum - x。而且既然两边需要最短的话,中间我们要找的就是【最长的那一段】

2.jpg

评论 21
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烽起黎明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值