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;
}
相关推荐
kangkang-1 小时前
PC端基于SpringBoot架构控制无人机(三):系统架构设计
java·架构·无人机
iCxhust2 小时前
c# U盘映像生成工具
开发语言·单片机·c#
yangzhi_emo2 小时前
ES6笔记2
开发语言·前端·javascript
界面开发小八哥3 小时前
「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(三)
java·ide·java-ee·myeclipse
idolyXyz3 小时前
[java: Cleaner]-一文述之
java
一碗谦谦粉3 小时前
Maven 依赖调解的两大原则
java·maven
emplace_back3 小时前
C# 集合表达式和展开运算符 (..) 详解
开发语言·windows·c#
jz_ddk3 小时前
[学习] C语言数学库函数背后的故事:`double erf(double x)`
c语言·开发语言·学习
萧曵 丶4 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust