当前位置: 首页 > news >正文

【剑斩OFFER】算法的暴力美学——将 x 减到零的最小操作数

一、题目描述

二、算法原理

        我们这道题的要求是找最小的次数的数组的和能刚到把 x 减为 0 ,直接按题目的要求来解题太困难了,我们可以运用一下反向思维,假设一个数组的长度位 4,和等于16,x = 5;那么 16 - 5 = 9,也就是说我们只要找到最长的子数组剩下的子数组就是题目要求的次数;例如:

        所以我们由上图可知只要求出 sum - x 的最长子数组就可以得出题目要求的最小操作数。

思路:使用滑动窗口来解决。

①我们先定义两个指针来指向第一个数,再定义 len 来找到最长的子数组,再定义 sum 来表示right 在右移动的加起来值

②right++过程中只要sum > target, sum -= nums[left] ,left++;

③此时结果有两种:sum == target , sum < target ,只有 sum == target 才符合条件,所以才可以更新 len 的值。

模拟过程:

所以最终答案:数组的总长度 - len

三、代码实现

class Solution {
public:int minOperations(vector<int>& nums, int x) {int right = 0, left = 0, sum = 0,target = 0;for(auto e : nums){sum += e;}target = sum - x;if(target == 0) return nums.size();sum = 0;int len = -1;while(right < nums.size()){sum += nums[right];while(left < nums.size() && sum > target) sum -= nums[left++];if(sum == target) len = max(len,right - left + 1);right++;}if(len == -1) return len;else return nums.size() - len;}
};

探索性代码:

class Solution {
public:int minOperations(vector<int>& nums, int x) {int right = 0, left = 0, sum = 0,target = 0;for(auto e : nums){sum += e;}target = sum - x;if(target == 0) return nums.size();sum = 0;int len = 0;while(right < nums.size()){sum += nums[right];while(left < nums.size() && sum > target){sum -= nums[left++];}if(sum == target) len = max(len,right - left + 1);right++;}return len == 0 ? -1 : nums.size() - len;}
};

http://www.dtcms.com/a/449383.html

相关文章:

  • Docker(四)—— 使用 Docker 搭建 Nginx 并实现 HTTPS 访问
  • 浏览器中的隐藏IDE: Elements (元素) 面板
  • 【JVM】实战篇(一)
  • 住房城市建设部门户网站一件代发48个货源网站
  • 宣武深圳网站建设公司下关网站建设
  • 电商的网站有几个如何做高校的网站版面设计
  • 蚁群算法解决TSP问题
  • 数据库丢失但没备份过?救星:二进制日志
  • 【C++实战(74)】深入C++安全编程:密码学实战之旅
  • inbound 概念及题目
  • UNet改进(43):SaFA-MS-UNet如何提升图像分割精度?
  • 网站建设中的智能元素凡科建站代理商登录
  • Elasticsearch 之分页查询
  • apache hop 不能处理clickhouse 数组格式怎么办?
  • 网站建设 网站设计php语言网站开发公司北京
  • 代码审计
  • 制作网站需要钱吗天津网址
  • cursor使用之没有正常的编辑器中的运行箭头
  • 建设网站优化创意网站建设价格多少
  • soular入门到实战(3) - 如何实现TikLab工具链统一登录认证
  • Python图形界面——海龟绘图
  • 《强化学习数学原理》学习笔记9——值迭代算法
  • 网站建设 统一标准体系什么是网络销售
  • 网站开发语言有哪几种临沂专业网站制作
  • 花店网站建设方案网站木马文件删除
  • Bash 的基本语法总结
  • 网站怎么进行优化网站开发 英文文章
  • 自动驾驶决策规划算法(开幕式)
  • 从零起步学习Redis || 第八章:过期删除策略与内存淘汰策略详解及实战使用(LRU和LFU算法详解)
  • 自动驾驶中的传感器技术65——Navigation(2)