蓝桥杯Java(基础入坑模板和api)

189 阅读2分钟

image.png

判断闰年

static boolean is(int x) {
    return x%400==0 || (x%4==0 && x%100!=0);
}

筛素数O(n^1/2)

static boolean is(int n) {
    if(n==1)
        return false;
    for(int i=2;i<=Math.sqrt(n);i++)
        if(n%i==0)
            return false;
    return true;
}

倍筛法_素数O(nlogn)

public class 倍筛模板 {
public static void main(String[] args) {
    boolean[] is = new boolean[1000005];
    is[1] = true;//true表示不是素数
    for(int i=2;i<1000005;i++)
        if(!is[2])
            for(int j=2*i;j<1000005;j+=i)
                is[j] = true;
    System.out.println(is[2004]);
   }
}

01背包(其中的物品只能用一次)

public class _01背包 {
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int m = in.nextInt();//大小
    int n = in.nextInt();//物品数
    int[] dp = new int[m+5];//开背包质量的大小
    for(int i=1;i<=n;i++) {
        int w = in.nextInt();//物品体积
        int v = in.nextInt();//物品价值
        for(int j=m;j>=w;j--)//区别点m
            dp[j] = Math.max(dp[j], dp[j-w]+v);
    }
    System.out.println(dp[m]);
}
}

完全背包

import java.util.Scanner;
public class _完全背包 {
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int m = in.nextInt();//大小
    int n = in.nextInt();//物品数
    int[] dp = new int[m+5];//开背包质量的大小
    for(int i=1;i<=n;i++) {
        int w = in.nextInt();//物品体积
        int v = in.nextInt();//物品价值
        for(int j=w;j<=m;j++)//区别点v
            dp[j] = Math.max(dp[j], dp[j-w]+v);
    }
    System.out.println(dp[m]);
   }
}

最大公约数gcd

public static int gcd(int a, int b) {
    if (b == 0) {
        return a;
    }
    return gcd(b, a % b);
}

最小公倍数lcm

public static int lcm(int a, int b) {
    int gcd = gcd(a, b);
    return (a * b) / gcd;
}
​
public static int gcd(int a, int b) {
    if (b == 0) {
        return a;
    }
    return gcd(b, a % b);
}
​

前缀和模板

import java.util.Scanner;
public class 前缀和模板 {
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    int[] sum = new int[n+1];
    for(int i=1;i<=n;i++)
        sum[i] = sum[i-1] + in.nextInt();//前i个数的和
 
     }   
}

并查集模板

static int N=10005;
static int n,m,cnt=0;
static int[] f = new int[N];//初始化一般是f[i]=i
static int init(int x){
    for(int i=1;i<=n;i++){
        f[i]=i;
    }
}
static int find(int x) {
    if(f[x]==x)
        return x;
    return f[x] = find(f[x]);
}
​
static void union(int x,int y) {
    int a = find(x);
    int b = find(y);
    if(a!=b) {
        f[a] = b;
    }
}

进制问题

static int f(int n,int k) {//调用API转成k进制,缺点题目有上界为8
    int ans=0;
    String s = Integer.toString(n, k);
    System.out.println(s);
    for(int i=0;i<s.length();i++)
        ans+=s.charAt(i)-'0';
    return ans;
}

二分答案_模板

static void f(int[] a) {
    int n = a.length;
    int l=0,r=n-1,ans=0;//一般上界需要自己构造
    while(l<=r) 
    {
        int mid = l + (r-l)/2;
        if(ok(a[mid])) {
            r = mid-1;
            ans = mid;
        }else
            l = mid+1;
    }
    System.out.println(ans);
}
​
static boolean ok(int x) {
    return false;//按照题意写
}

二叉树

public class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x){
        val=x;
    }
}
​
public int f(TreeNode root){
    if(root==null)return 0;
    int l=f(root.left);
    int r=f(root.right);
    if()
        
    return 
}

StringBuilder、StringBuffer基础用法

//StringBuilder线程不安全,性能快
//StringBuffer 线程安全,性能差  
StringBuilder sb=new StringBuilder();
sb.append();     //添加
sb.reverse();    //反转
char c=sb.charAt(1);    //获取指定位置
int index = sb.indexOf("ce");//获取字串下标

Calendar日期类

Calendar calendar = Calendar.getInstance();//使用当前时间获取Calendar对象:
int year = calendar.get(Calendar.YEAR);//获取年份
int year = calendar.get(Calendar.YEAR);//月份是从0开始算起的,所以获取月份以后要加1才是真正的月份。
int day = calendar.get(Calendar.DATE);//获取日期
calendar.set(Calendar.xxx, 123);//修改日期
calendar.add(Calendar.DATE, 1);//加一天

BigInteger大数

BigInteger a = BigInteger.valueOf(123456789);//用BigInteger存数
 BigInteger sum = BigInteger.ZERO;//初始化为0
sum=sum.add(temp.pow(8));//幂运算

sort排序

public class Main {
    public static void main(String[] args) {
        int []array1={2,3,4,5};
        Arrays.sort(array1);     
        System.out.println("a");
    }
}