首页 > 其他分享 >美丽的区间

美丽的区间

时间:2024-04-09 16:14:33浏览次数:17  
标签:count int sum cin ++ 美丽 ans 区间

0.题目

1.题解

1.1 双指针暴力枚举

思路

思路很简单,但是最坏可能 \(O(n^2)\), 导致超时

代码

#include <bits/stdc++.h>
using namespace std;
const int M  = 1e5;
int ans = 0x7FFFFFFF;
int a[M];

int main() {
    int n, S;
    bool flag = false;
    cin >> n >> S;
    for(int i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (int i = 0; i < n; i++) {
        int sum = 0, count = 0;
        for(int j = i; j < n; j++) {
            sum += a[j];
            count++;
            if(count >= ans) break;
            if(sum >= S) {
                ans = min(ans, count);
                flag = true;
                break;
            }
        }
    }
    if(flag) {
        cout << ans;
    } else {
        cout << "0";
    }

    return 0;
}

1.2 滑动窗口(尺取法)

思路

注意到连续区间,大概率会涉及到滑动窗口算法,利用快慢指针的思路,控制窗口不断向右滑动,在大于等于S和小于S之间做判断

代码

#include <bits/stdc++.h>
using namespace std;
const int M  = 1e5;
int ans = 1e5;
int a[M];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n, S;
	cin >> n >> S;
	for(int i = 0; i < n; i++) {
		cin >> a[i];
	}
	
	int sum = 0;
	for (int i = 0, j = 0; i < n;) {
		if(sum < S) {
			sum += a[i];
			i++;
		}
		else{
			ans = min(ans, i - j);
			sum -= a[j];
			j++;
		}
	}

	if(ans == 1e5) cout << 0;
	else cout << ans;
	return 0;
}

标签:count,int,sum,cin,++,美丽,ans,区间
From: https://www.cnblogs.com/trmbh12/p/18124181

相关文章

  • 整数区间
    原题链接题解1.设\(f(i)\)为\([0,i]\)区间内该有多少个数属于整数集\(Z\)则对于每一对输入的\(x,y,c\)都有\(f[y]-f[x-1]>=c\)而且\(0<=f[i]-f[i-1]<=1\)差分约束由此得来又因为下标从零开始,而且我们需要建立超级源点,所以我们把\(f\)内的下标整体往右移两位co......
  • LeetCode题练习与总结:插入区间--57
    一、题目描述示例 1:输入:intervals=[[1,3],[6,9]],newInterval=[2,5]输出:[[1,5],[6,9]]示例2:输入:intervals=[[1,2],[3,5],[6,7],[8,10],[12,16]],newInterval=[4,8]输出:[[1,2],[3,10],[12,16]]解释:这是因为新的区间[4,8]与[3,5],[6,7],[8,10] 重叠。......
  • P8600 [蓝桥杯 2013 省 B] 连号区间数 and CF526F
    问题转化很容易就能把原问题转化成:求满足Max-Min=r-l的区间个数暴力解法根据上面得到的性质,我们可以暴力枚举区间,来判断当前区间是否满足性质#include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#include<string.h>#def......
  • 使用Python的turtle模块绘制美丽的樱花树
    引言Python的turtle模块是一个直观的图形化编程工具,让用户通过控制海龟在屏幕上的移动来绘制各种形状和图案。turtle模块的独特之处在于其简洁易懂的操作方式以及与用户的互动性。用户可以轻松地通过使用诸如前进、后退、左转、右转等基本命令,来编写程序控制海龟的行动路径,从而创......
  • 2024.3.8力扣每日一题——找出美丽数组的最小和
    2024.3.8题目来源我的题解方法一数学题目来源力扣每日一题;题序:2834我的题解方法一数学经过分析,在target之前,取小于等于target/2的正整数才能使得和最小,并且满足条件3。时间复杂度:O(n)空间复杂度:O(n)publicintminimumPossibleSum(intn,inttarget)......
  • 动态规划区间DP
    动态规划区间DP普通区间DP石子合并(蓝桥官网1233)#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=300;intn,a[N],s[N],f[N][N];signedmain(){cin>>n;memset(f,127,sizeof(f));//初始化f为较大值for(inti=1;i<=......
  • k 不相交区间
    题意:给定一个序列,要求从中选出\(k\)个不相交的区间使和最大。\(n\le10^5\)。如果DP,至少\(O(n^2)\)。而这题可以模拟费用流做。【费用流模型】建立\(n+1\)个点\(p_1\simp_{n+1}\),\(p_i\rightarrowp_{i+1}\)容量\(1\)费用\(a_i\)。\(S\rightarrowp_1\simp_n\)......
  • P8649 [蓝桥杯 2017 省 B] k 倍区间
    importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);//读取输入的整数n和kintn=sc.nextInt();//数组长度intk=sc.nextInt();//取模的值......
  • 4.区间最大和
    问题描述给定一个序列a[1],a[2],...,an]和一个整数k,请找出-个长度正好为的区间,使得区间中所有数的和最大即要找到一个整数p,使得1<p且p+k-1n,使得ap+ap+1+·.·+ap+k-1]最大输入格式输入的第一行包含两个整数n,k。第二行包含n个整数,相邻的整数之间使用一个空格分隔表示......
  • 2580. 统计将重叠区间合并成组的方案数(中等)
    核心思想先按第一个元素排序,原区间重合的合并为一个,计算合并完后的区间个数。每个区间都有2个选择,res不断乘2。classSolution{publicintcountWays(int[][]ranges){longres=1;finalintMOD=(int)(1e9+7);Arrays.sort(ranges,(......