首页 > 其他分享 >统计区间(双指针)

统计区间(双指针)

时间:2024-01-16 11:26:33浏览次数:25  
标签:非空 ++ ll long 区间 统计 指针


这题求的非空区间可以是整个数组内的任意一个区间,刚开始我是想用一个for和一个while
for(int i=0; i<n; i++) { l=0,sum=0; while(l<i) { int j=l; for(int k=j; k<i; k++) { sum+=a[k]; if(sum>=k) { s++; break; ) } l++; }}
但因为数据太大,肯定要超时(chaoshigetout),所以改成两个指针,l和r代表非空区间的大小,因为所有的都是正整数,所以当右指针找到大于k的地方时,在左指针不动的情况下继续向右扩大肯定也是大于k的,然后再进行左指针的向右移动一直到不大于k或者=r为止;比起上面的省略的就是每次右指针右移的时候都会重新进行一遍整个区间的添加 和当对同一个区间的重复添加
#include<bits/stdc++.h> using namespace std; const long long N = 1e6 + 10; typedef long long ll; int main() { ll n, k;//n:数组长度,k:比较的大小 cin >> n >> k; ll a[N]; for (ll i = 0; i < n; ++i) { cin >> a[i]; } ll s = 0;//非空区间的个数 ll sum = 0;//当前非空区间所有元素的大小 ll l = 0, r = 0;//左指针和右指针 while (r < n){//数组是从0开始存的,所以<n sum += a[r];//先扩大右指针一直到非空区间大于k为止 while (sum >= k) {//当这个非空区间大于k时 s += n - r;//因为这里都是正整数,所以当左指针到右指针之间的非空区间大于k时,右指针继续右移也会大于k sum -= a[l++];//移动左指针 } ++r;//当左指针移动到非空区间小于k时,继续移动右指针 } cout << s <<"\n"; return 0; }

标签:非空,++,ll,long,区间,统计,指针
From: https://www.cnblogs.com/tzstlove/p/17967226

相关文章

  • 15指向成员变量和成员方法的指针
    指向成员变量和成员方法的指针指向成员变量的指针classTest{public: intma; staticintmb;};intTest::mb;intmain(){//类对象的成员变量指针不是普通的指针,需要加入类名限定符//类的静态成员变量指针不针对某一个特定对象,使用普通指针 int*p=&Tes......
  • 9类和对象与this指针
    类和对象,this面向对象的四大特性:抽象,封装/隐藏,继承,多态属性一般都是私有的,向外提供公有方法以访问私有属性。类本身不占内存,实例化对象占内存。类体内定义的成员函数默认为内联,体外定义需要加inline修饰。一个类可以定义无数的对象,每一个对象都有自己的成员变量,成员函数是公......
  • 视频监控管理平台智能边缘分析一体机视频分析区域人数统计
    在这个数据驱动的时代,我们每天都在产生大量的数据。这些数据中蕴含着无尽的信息和价值,只要我们有足够的能力去挖掘和利用。然而,传统的数据处理方式往往无法满足我们对实时、精准、高效的需求。这时,智能边缘分析一体机应运而生,它以其独特的优势,正在改变我们的生活和工作方式。今天......
  • 如何统计接口自动化覆盖率?
    Python可以适用coveragepy来统计代码行覆盖率,使用方式coveragerun-mpytest 运行之后生成新的.coverage文件,这个文件以二进制形式保存着我们覆盖率的数据,如何读取覆盖率数据呢?通过cmdline命令执行coveragereport可以查看覆盖率数据。可通过coveragereport-m查看哪......
  • 吴师兄学算法day07 双指针 680. 验证回文串 II
    题目:680. 验证回文串II易错点:s[1:3]是左闭右开我的第一次代码:classSolution(object):defvalidPalindrome(self,s):""":types:str:rtype:bool"""isPalindrome=lambdax:x==x[::-1]l......
  • Python列表差异值统计:集合操作、列表推导式、对称差集详解
     在Python中,统计两个列表的差异值有多种方法,其中包括使用集合操作、列表推导式等。下面我将通过实例详细讲解几种常见的方法,并提供相应的实例源代码。方法一:使用集合操作list1=[1,2,3,4,5]list2=[3,4,5,6,7]#找到在list1中而不在list2中的元素difference1......
  • 吴师兄学算法day07 双指针 125. 验证回文串
    题目:125. 验证回文串易错点:isaplha()isdigit()lower()要熟悉,挺有用的。我的代码:classSolution:defisPalindrome(self,s:str)->bool:ans=''foriins:ifi.isalpha()ori.isdigit():ans+=i.lower()#......
  • POSTGRESQL分析和优化器统计信息
    优化器统计的目的在我们深入研究PostgreSQL优化和统计之前,有必要了解PostgreSQL如何运行查询。典型的流程如下:首先,PostgreSQL解析查询。然后,trafficcop将实用命令(ALTER、CREATE、DROP、GRANT等)从其他命令中分离出来。在这之后,整个事情都经过重写系统,它负责处理规则等。......
  • abc098d<双指针,异或>
    题目D-XorSum2给出n个元素的数组a,求满足条件的子区间个数:数组a子区间元素和与异或和相等。思路和与异或和相同,即没有任何进位,也就是区间中对于范围内每个二进制位,最多出现一次;使用双指针,统计每个二进制位最多出现一次的区间个数即可;总结异或:不进位加法;代码点击......
  • 吴师兄学算法day07 双指针 9. 回文数
    题目:9. 回文数易错点:右指针要记得移动我的代码:classSolution:defisPalindrome(self,x:int)->bool:array=list(str(x))right=len(array)-1forleftinrange(len(array)//2):ifarray[left]==array[right]:......