首页 > 其他分享 >力扣第209题(双指针)

力扣第209题(双指针)

时间:2023-06-13 14:14:01浏览次数:49  
标签:元素 209 位置 起始 力扣 result 终止 移动 指针

209. 长度最小的子数组 - 力扣(LeetCode)

我的思路:

固定起始位置,移动终止位置,将起始位置和终止位置之间的元素进行加和。直到满足条件就停止移动终止位置。这个时候将起始位置向前移动一个距离,然后将终止位置重新移回更新后的起始位置上。这样做的问题是会带来重复的操作。

比如一个数组中的元素为{2,3,1,2,4,3}找到长度大于等于7的最小数组长度。第一次起始位置是第一个元素,当终止位置移动到第四个元素时将起始位置向前移动到第二个元素的位置,为什么将终止位置重新移回更新后的起始位置上会造成重复呢,因为,正是因为2+3+1比7小,终止位置才会向后移动一个位置的,因此3+1都少了一个2了结果肯定小于7。因此没必要将终止位置重新移回更新后的起始位置上。

总结起来得到的经验是,算法中不要出现指针回退的步骤,如果有就要检查一下这么做是否会造成重复。

正确的思路是:

当满足条件时不断地移动起始位置,直到起始位置和终止位置之间的元素加和小于条件值为止。此时再将终止位置向前移动一个单位。

 1     int minSubArrayLen(int target, vector<int>& nums) {
 2         int fast=0,slow=0,sum=0,result = INT32_MAX,size=nums.size();
 3         for(;fast<size;++fast)
 4         {
 5             sum+=nums[fast];         
 6             while(sum>=target)
 7             {
 8                 result=result<(fast - slow + 1)?result:fast - slow + 1;
 9                 sum-=nums[slow++];
10             }
11         }
12         return result==INT32_MAX?0:result;
13     }

 

标签:元素,209,位置,起始,力扣,result,终止,移动,指针
From: https://www.cnblogs.com/Sandals-little/p/17477333.html

相关文章

  • 力扣---2475. 数组中不等三元组的数目
    给你一个下标从0开始的正整数数组nums。请你找出并统计满足下述条件的三元组(i,j,k)的数目:0<=i<j<k<nums.lengthnums[i]、nums[j]和nums[k]两两不同。换句话说:nums[i]!=nums[j]、nums[i]!=nums[k]且nums[j]!=nums[k]。返回满足上述条件三元组的数目......
  • Java开发常出错5颗星——空指针和异常
    常犯指数5颗星空指针空指针概念及样例什么是空指针(java.lang.NullPointExcetion)?空:内存地址指针:引用异常:运行时privatestaticclassUser{privateStringname;privateString[]address;publicvoidprint(){System.out.pr......
  • (一)、C++学习随笔:指针
    北京时间2023年6月11日22点53分,天气总体晴,温度适宜。没写随笔差不多一年了,也从佛山的广发银行、美的外包跳槽到了深圳坂田这边的华为OD,JAVA或许是干的不太愿意深入了,想学习下C++。今天学习到C++的重点之一:指针,鄙人不才,记忆力不太好,所谓的好记性不如烂笔头,把学到的指针知识都记录下......
  • 力扣---875. 爱吃香蕉的珂珂
    珂珂喜欢吃香蕉。这里有n堆香蕉,第i堆中有 piles[i] 根香蕉。警卫已经离开了,将在h小时后回来。珂珂可以决定她吃香蕉的速度k(单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉k根。如果这堆香蕉少于k根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。 ......
  • 智能指针补—weak_ptr
    本次主要是补充一下智能指针章节的遗漏部分——weak_ptr指针    weak_ptr是C++11中引入的一种智能指针,它的作用就是配合shared_ptr对资源进行管理。由于weak_ptr设计的作用就是配合shared_ptr,因此其是一种“弱引用”,本身并不会增加所指对象的引用计数,也不会影响所指对象的生......
  • C++ 指针
    一、C++指针的算术运算递增一个指针我们喜欢在程序中使用指针代替数组,因为变量指针可以递增,而数组不能递增,因为数组是一个常量指针。下面的程序递增变量指针,以便顺序访问数组中的每一个元素:实例#include<iostream>usingnamespacestd;constintMAX=3;intmain()......
  • 力扣---1170. 比较字符串最小字母出现频次
    定义一个函数 f(s),统计 s 中(按字典序比较)最小字母的出现频次,其中s 是一个非空字符串。例如,若 s="dcce",那么 f(s)=2,因为字典序最小字母是 "c",它出现了 2次。现在,给你两个字符串数组待查表 queries 和词汇表 words。对于每次查询 queries[i],需统计words中......
  • 力扣977题(双指针)
    所用算法:双指针观察题目的规律,平方之后该数组两边的数大,中间的数小,因此想到双指针,一个指针指向数组的开头,一个指针指向数组的结尾。如果你觉得在原数组上操作会将未遍历的元素覆盖掉,那么一定要开辟一个新的数组,将原数组的值赋给新的数组。(比如一个数组平方之后的数组是{......
  • C语言的指针
    1.初步理解指针C语言的指针指的是一个地址,也是内存单元的编号,它存储的是内存地址.#include<stdio.h>intmain(){//初始化一个变量a的值inta=10;//定义一个指针p指向变量a的地址,int*表示这个变量存放的是int类型的地址int*p=&a;//打印这个指针所指向的变量......
  • C++面试八股文:指针占用多少个字节?
    C++面试八股文:指针占用多少个字节?某日小二参加XXX科技公司的C++工程师开发岗位4面:面试官:memset、memcpy和strcpy的区别是什么?小二:memset用于将一块内存设置为特定的值,memcpy用于将一块内存从一个位置复制到另一个位置,strcpy用于将一个字符串从一个位置复制到另一个位......