这题一开始试图用贪心,我用两个指针分别指向头和尾,然后每次选较大的值,移动指针,直到和加起来=x,但是如果两个值相等,该如何移动?就不行了。DP也考虑过,时间复杂度较高。

然后换一种思路,在原数组两端找两个子数组和=x,等同于在原数组中间找一个连续的子数组和=原数组和-x。这样就可以用滑动窗口了,sum表示原数组总和,用midSum记录中间数组的和,每次循环先移动右边界,如果midSum>sum-x,且right>=left,则一直左移left;这里right>=lefth很重要,我一开始漏掉了right=left的情况,这时候left左移之后=right+1,midSum=0。每轮循环最后,如果left不再需要左移了,判断midSum==sum-x,相等则更新答案。我初始化ans为int最大值,每次更新保留最小值,如果最终ans没有被更新过,那么就是没找到,返回-1。

class Solution {public int minOperations(int[] nums, int x) {int ans = Integer.MAX_VALUE;int sum = 0;for (int n : nums) {sum += n;}int midSum = 0;for (int left = 0, right = 0; right < nums.length; right++) {midSum += nums[right];while (midSum > sum - x && right >= left) {midSum -= nums[left++];}if (midSum == sum - x) {ans = Math.min(ans, nums.length - (right - left + 1));}}return ans == Integer.MAX_VALUE ? -1 : ans;}
}

leetcode 1658相关推荐

  1. LeetCode 1658. 将 x 减到 0 的最小操作数(哈希)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums 和一个整数 x .每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值.请注意,需要 修 ...

  2. LeetCode 1658. 将 x 减到 0 的最小操作数

    1658. 将 x 减到 0 的最小操作数 给你一个整数数组 nums 和一个整数 x .每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值.请注意,需要 修改 ...

  3. [LeetCode]135.Candy

    [题目] There are N children standing in a line. Each child is assigned a rating value. You are giving ...

  4. 【LeetCode】(55)Jump Game(Medium)

    题目 Jump Game Total Accepted: 52275 Total Submissions: 194395My Submissions Question  Solution  Given ...

  5. LeetCode之Candy

    [题目] There areNchildren standing in a line. Each child is assigned a rating value. You are giving ca ...

  6. leetcode 5. Longest Palindromic Substring 字符串中的最长回文数 逐步从O(n^2)优化至线性时间

    题目 解析 思路一 暴力解法 思路二 指针+最大长度 思路3 由中间至两边找回数 思路4 Manacher's algorithm 线性时间 参考文档 题目 链接 给定一个字符串 s,找到 s 中最长 ...

  7. LeetCode 10. Regular Expression Matching python特性、动态规划、递归

    前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...

  8. leetcode Longest Substring with At Most Two Distinct Characters 滑动窗口法

    题目解析 代码如下 题目解析 这一题是一道会员的题目,题目介绍如下: Given a string, find the length of the longest substring T that c ...

  9. leetcode 3. Longest Substring Without Repeating Characters 最长非重复子串的长度 滑动窗口法

    题目链接 根据我们之前介绍的滑动窗口法的解法: 滑动窗口法详解 leetcode 438. Find All Anagrams in a String 滑动窗口法 这题,我们不难解决,使用之前的模板. ...

最新文章

  1. Android开发者指南(22) —— Accessing Resources
  2. 卷积神经网络matlab_基于卷积神经网络的遥感图像养殖区自动划分
  3. 门户网站建设与运营需要付出更多成本
  4. 用python画梵高星空-python 梵高
  5. 剑指offer 算法(栈和队列 查找和排序)
  6. SDM管理路由器要进行的相应配置
  7. Raid技术在Linux下的使用
  8. 特征工程(1):特征提取、特征构建、特征选择的区别
  9. bzoj1096 [ZJOI2007]仓库建设
  10. 量子信息与量子计算_量子计算为23美分。
  11. 洛谷——P1067 多项式输出
  12. 基于JAVA+SpringMVC+Mybatis+MYSQL的学生信息与选课系统
  13. 二叉树的层次遍历II
  14. 软件开发demo是什么意思_地府后台管理系统demo出来了!附地址
  15. 解决pycharm 提示no tests were found的问题
  16. thymeleaf判断对象是否为空的相关逻辑处理
  17. 应用时间序列分析第四章课后习题(R语言实现)
  18. 语音合成 TTS 相关的一些总结
  19. Word2013怎样从任意页开始设置页码
  20. Spring中的Environment

热门文章

  1. 西瓜直播弹幕阅读器 python
  2. 别学AI了!90%的人编程能力差,其实都是输在了这点上!
  3. 根据图片名字获取Drawable对象
  4. u盘安装linux卡logo,安装Ubuntu16.04卡在logo界面
  5. 2018.10.04 codeforces1060E. Sergey and Subway(树形dp)
  6. 21-《电子入门趣谈》第四章_自己制作电路板-4.2洞洞板的介绍和经典案例使用教程
  7. javaMailSender 发送邮件设置昵称
  8. SuMa++论文笔记
  9. php中如何声明静态属性,PHP使用static关键字声明静态属性和静态方法
  10. Netty游戏服务器实战开发(12):线程任务组件开发