4月7号总结

java学习

一.正则表达式

定义:正则表达式是一种用于描述字符串模式的表达式,通常被用于文本搜索、匹配和替换。它是一种强大的工具,可以在文本处理和文本分析中进行复杂的匹配和操作。

通过字符串引用里面的方法matches,然后执行匹配功能。

举例:

复制代码
 public static void main(String[] args) {
        String t="a";
        System.out.println(t.matches("[abc]"));
    }

上面代码表示,如果字符串t里面的元素之含[]里面有的,那么就返回真,反之返回假。

复制代码
 public static void main(String[] args) {
        String t="p";
        System.out.println(t.matches("[abc]"));
    }

注意:只能匹配单个字符。

复制代码
public static void main(String[] args) {
        String t="abc";
        System.out.println(t.matches("[abc]"));
    }

举例:

注意:这里虽然是一个反斜杠,但是我们在写代码时需要两个,这是一个规则。

复制代码
 public static void main(String[] args) {
        String t="2";
        System.out.println(t.matches("\\d"));
    }

2是数字,所以结果应该是真。

但是如果你使用了多字符还是会和上面一样,返回false,因为这个也是匹配单字符的。

举例:

复制代码
public static void main(String[] args) {
        String t="123";
        System.out.println(t.matches("[1-9]{3}"));
    }

上面是1到9之间的数字刚刚好出现三次。

所以应该返回真。

使用案例:

比如我们需要匹配一个qq好是否合理,我们知道qq号全部是由数字组成,并且第一个数字不能为0,长度在5到10之间。

那么我们就可以用这些信息来写一个匹配。

下面是完成的代码:

复制代码
public static void main(String[] args) {
        String t="12003000";
        System.out.println(t.matches("[1-9]\\d{5,10}"));
    }

表示第一个数字在1到9之间,后面全部是由数字组成,不包括第一个字符在内后面有4到9个数字,加起来就是限制在5到10个数字。

二.线段树练习题

Sample 1

Inputcopy Outputcopy
5 5 1 5 4 2 3 2 2 4 1 2 3 2 2 3 4 1 1 5 1 2 1 4 11 8 20

线段树的入门题,这里就不过多讲解。

AC代码:

复制代码
#include<iostream>
#include<cstdio>
#define MAXN 1000001
#define ll long long
using namespace std;
unsigned ll n,m,a[MAXN],ans[MAXN<<2],tag[MAXN<<2];
inline ll ls(ll x)
{
    return x<<1;
}
inline ll rs(ll x)
{
    return x<<1|1;
}
inline void push_up(ll p)
{
    ans[p]=ans[ls(p)]+ans[rs(p)];
}
void build(ll p,ll l,ll r)
{
    tag[p]=0;
    if(l==r){ans[p]=a[l];return ;}
    ll mid=(l+r)>>1;
    build(ls(p),l,mid);
    build(rs(p),mid+1,r);
    push_up(p);
} 
inline void f(ll p,ll l,ll r,ll k)
{
    tag[p]=tag[p]+k;
    ans[p]=ans[p]+k*(r-l+1);
}
inline void push_down(ll p,ll l,ll r)
{
    ll mid=(l+r)>>1;
    f(ls(p),l,mid,tag[p]);
    f(rs(p),mid+1,r,tag[p]);
    tag[p]=0;
}
inline void update(ll nl,ll nr,ll l,ll r,ll p,ll k)
{
    if(nl<=l&&r<=nr)
    {
        ans[p]+=k*(r-l+1);
        tag[p]+=k;
        return ;
    }
    push_down(p,l,r);
    ll mid=(l+r)>>1;
    if(nl<=mid)update(nl,nr,l,mid,ls(p),k);
    if(nr>mid) update(nl,nr,mid+1,r,rs(p),k);
    push_up(p);
}
ll query(ll q_x,ll q_y,ll l,ll r,ll p)
{
    ll res=0;
    if(q_x<=l&&r<=q_y)return ans[p];
    ll mid=(l+r)>>1;
    push_down(p,l,r);
    if(q_x<=mid)res+=query(q_x,q_y,l,mid,ls(p));
    if(q_y>mid) res+=query(q_x,q_y,mid+1,r,rs(p));
    return res;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++){
		cin>>a[i];
	}
    build(1,1,n);
    while(m--)
    {
        int k;
        cin>>k;
        switch(k)
        {
            case 1:{
            	ll l,r,w;
                scanf("%lld%lld%lld",&l,&r,&w);
                update(l,r,1,n,1,w);
                break;
            }
            case 2:{
            	ll l,r;
                scanf("%lld%lld",&l,&r);
                printf("%lld\n",query(l,r,1,n,1));
                break;
            }
        }
    }
    return 0;
}
相关推荐
初夏睡觉17 分钟前
c++1.3(变量与常量,简单数学运算详解),草稿公放
开发语言·c++
升职佳兴25 分钟前
C盘爆满自救:3步无损迁移应用数据到E盘(含回滚)
c语言·开发语言
ID_1800790547328 分钟前
除了 Python,还有哪些语言可以解析 JSON 数据?
开发语言·python·json
周末也要写八哥1 小时前
多进程和多线程的特点和区别
java·开发语言·jvm
惜茶2 小时前
vue+SpringBoot(前后端交互)
java·vue.js·spring boot
宁瑶琴2 小时前
COBOL语言的云计算
开发语言·后端·golang
杰克尼2 小时前
springCloud_day07(MQ高级)
java·spring·spring cloud
小陈工3 小时前
2026年4月2日技术资讯洞察:数据库融合革命、端侧AI突破与脑机接口产业化
开发语言·前端·数据库·人工智能·python·安全
Zarek枫煜3 小时前
C3 编程语言 - 现代 C 的进化之选
c语言·开发语言·青少年编程·rust·游戏引擎
阿kun要赚马内3 小时前
Python中元组和列表差异:底层结构分析
开发语言·python