寒假每日总结

双指针(基础思路):

新手入门:有序数组的平方

定义两个指针下标分别指向数组的第一个与最后一个元素,由于本身为有序数组所以通过下标元素的大小比较,将较大的元素存储到新的数组中并移动较大元素的下标,形成一个全新的有序数列,时间复杂度为O(n)。

蛇形矩阵:

四个坐标:

两个坐标:

注意:

循环次数(圈数):边长/2

if(边长为奇数){

    在二维数组中心赋值最后的数;

}

队列:

典型问题:P7505 「Wdsr-2.5」小小的埴轮兵团  洛谷
#include <stdio.h>
#include <math.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#include<bits/stdc++.h>
using namespace std;
long long int n,m,op,k,a[300005],x,w;
int main(){
    scanf("%lld %lld %lld",&n,&m,&k);
    long long int l=1,r=n;
    for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
    sort(a+1,a+n+1);
    for(int i=1;i<=m;i++){
        scanf("%lld",&op);
        if(op==3){
            printf("%lld\n",r-l+1);
            continue;
        }
        scanf("%lld",&x);
        if(op==1){
            w=w+x;
            while(a[r]+w>k && l<=r){
                r--;
            }
        }else if(op==2){
            w=w-x;
            while(a[l]+w<-k && l<=r){
                l++;
            }
        }
    }
}

注意:对时间复杂度的处理,无需每次对所有的元素进行值的变化,可以额外定义一个变量去记录多次变化后的元素值变化量。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值