首页 > 编程语言 >蓝桥杯Java组常用知识点

蓝桥杯Java组常用知识点

时间:2024-07-02 08:57:55浏览次数:17  
标签:知识点 Java int 蓝桥 static new return public

基本数据类型

int的取值范围:

-2^31 ~ 2^31-1

-2147483648 ~ 2147483647(约等于10的9次方)

long long的取值范围:

-2^63 ~ (2^63-1)

-9223372036854775808 ~ 9223372036854775807(约等于10的18次方)

输入输出

使用文件流对输入输出的重要性:https://blog.csdn.net/weixin_43554580/article/details/130167554

快速输入输出 蓝桥杯JAVA-1.入门必知、正常输入输出和快速输入输出_正常输出和快速输出是什么意思-CSDN博客

	
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	
	static StreamTokenizer st = new StreamTokenizer(br);
	
	static int nextInt() throws Exception {st.nextToken();return (int) st.nval;}
	
	static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
	
输入:

 	private static char getChar() throws IOException {
        String s = getString();
        return s.charAt(0);
    }

    private static String getString() throws IOException {
        InputStreamReader inputStreamReader = new InputStreamReader(System.in);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String str = bufferedReader.readLine();
        return str;
    }


    private static int getInt() throws IOException {
        String s = getString();
        return Integer.parseInt(s);
    }

输出:
 	private static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));

排序

重写 Comparator 比较器

参考:【蓝桥杯Java】数位排序 Java中Arrays.sort()自定义排序的实现

自定义排序的数组需要为Integer类型,使用int类型数组会报错

质数

1.质朴思路

private boolean isPrime(int num) {
    //注意 i 遍历到最大 sqrt(num) 即可
    int max = (int)Math.sqrt(num);
    for (int i = 2; i <= max; i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}

2.埃式筛

埃式筛

public int countPrimes(int n) {
    boolean[] isPrim = new boolean[n];
    Arrays.fill(isPrim, true);
    // 从 2 开始枚举到 sqrt(n)。
    for (int i = 2; i * i < n; i++) {
        // 如果当前是素数
        if (isPrim[i]) {
            // 就把从 i*i 开始,i 的所有倍数都设置为 false。
            for (int j = i * i; j < n; j+=i) {
                isPrim[j] = false;
            }
        }
    }

    // 计数
    int cnt = 0;
    for (int i = 2; i < n; i++) {
        if (isPrim[i]) {
            cnt++;
        }
    }
    return cnt;
}

3.线性筛(欧拉筛)

最大公约数-模板

//最大公约数-模板
public static long gcd(long x,long y) {
		return y==0?x:gcd(y, x%y);
}

//最小公倍数-模板
public static long lcm(long x,long y) {
 		return x/gcd(x,y)*y;   
}

Stack 类

序号 方法描述
1 boolean empty() 测试堆栈是否为空。
2 Object peek( ) 查看堆栈顶部的对象,但不从堆栈中移除它。
3 Object pop( ) 移除堆栈顶部的对象,并作为此函数的值返回该对象。
4 Object push(Object element) 把项压入堆栈顶部。
5 int search(Object element) 返回对象在堆栈中的位置,以 1 为基数。

Deque(双向队列)

Java 数据结构之Deque(双向队列)_java 双向队列-CSDN博客

String

substring() 方法

public String substring(int beginIndex)
或
public String substring(int beginIndex, int endIndex)

参数

  • beginIndex -- 起始索引(包括), 索引从 0 开始。
  • endIndex -- 结束索引(不包括)。

例如:

0 1 2 3 4 5 6
T h i s i s
str="This is";
str.substring(2,7);//"is is"	[2,7)
str.substring(5);//"is"

KMP算法

排序

img

实现compare()

Arrays.sort(stu,new Comparator<student>() {
    @Override
    public int compare(student s1, student s2) {
        if (s1.sum!=s2.sum) {
            //降序
            return s2.sum-s1.sum;
        } else if (s1.chinese!=s2.chinese) {
            return s2.chinese-s1.chinese;
        } else {
            //升序
            return s1.no-s2.no;
        }
    }
});

例题:NOIP2009 普及组] 分数线划定 NOIP2007 普及组] 奖学金

二叉树

返回值问题:

  • 如果需要搜索整棵二叉树且不用处理递归返回值,递归函数就不要返回值。(113.路径总和ii
  • 如果需要搜索整棵二叉树且需要处理递归返回值,递归函数就需要返回值。(236. 二叉树的最近公共祖先
  • 如果要搜索其中一条符合条件的路径,那么递归一定需要返回值,因为遇到符合条件的路径了就要及时返回。(112. 路径总和

回溯算法

void backtracking(){
    if(终止条件){
        收集结果;
        return;
    }
    for(集合的元素集,类似节点的个数){
        处理节点;
        递归函数;
        回溯操作(撤销处理节点)l
    }
}

回溯算法理论基础

回溯算法解决的几类问题

  • 组合问题:N个数里面按一定规则找出k个数的集合
  • 切割问题:一个字符串按一定规则有几种切割方式
  • 子集问题:一个N个数的集合里有多少符合条件的子集
  • 排列问题:N个数按一定规则全排列,有几种排列方式
  • 棋盘问题:N皇后,解数独等等

回溯算法优化问题

需要满足 n - i >= k - path.size( ) → i <= n + path.size( ) - k +1

for (int i = startIndex; i <= n - (k - path.size()) + 1; i++) // i为本次搜索的起始位置

动态规划

  • 完全背包问题
  1. 如果求组合数就是外层for循环遍历物品,内层for循环遍历背包(无顺序)
  2. 如果求排列数就是外层for循环遍历背包,内层for循环遍历物品(有顺序)

图论

双向BFS

「双向 BFS」的搜索空间通常只有「朴素 BFS」的空间消耗的几百分之一,甚至几千分之一。

「双向 BFS」的基本实现思路如下:

创建「两个队列」分别用于两个方向的搜索;
创建「两个哈希表」用于「解决相同节点重复搜索」和「记录转换次数」;
为了尽可能让两个搜索方向“平均”,每次从队列中取值进行扩展时,先判断哪个队列容量较少;
如果在搜索过程中「搜索到对方搜索过的节点」,说明找到了最短路径。

d1、d2 为两个方向的队列
m1、m2 为两个方向的哈希表,记录每个节点距离起点的
    
// 只有两个队列都不空,才有必要继续往下搜索
// 如果其中一个队列空了,说明从某个方向搜到底都搜不到该方向的目标节点
while(!d1.isEmpty() && !d2.isEmpty()) {
    if (d1.size() < d2.size()) {
        update(d1, m1, m2);
    } else {
        update(d2, m2, m1);
    }
}

// update 为将当前队列 d 中包含的元素取出,进行「一次完整扩展」的逻辑(按层拓展)
void update(Deque d, Map cur, Map other) {}

蓝桥杯准备

材料

Eclipse配置

如何在eclipse中设置代码自动补全_eclipse怎么实现代码补全-CSDN博客

img

Eclipse设置代码提示后不显示Java 类问题解决-CSDN博客

img

eclipse的控制台/console不见了怎么调出来?_eclipse控制台不见了-CSDN博客

image-20240412211054397

字体大小 -> Preferences搜索font-> Java文件夹修改代码字体大小(Java Editor) -> 搜索console修改控制台字体

img
.var -> ctrl+2 L

Eclipse 格式化代码块快捷键:Ctrl+Shift+F

拿分技巧

if(n<=1000){
    暴力解法
} else {
    正解
}

【Java组经验分享| 蓝桥杯拿分技巧】 https://www.bilibili.com/video/BV1NZ421z7WV/?share_source=copy_web&vd_source=5b3aef50b853d5b2be2d0da2462e99dd

时间&空间复杂度

计算机1s可以计算 10^8 次 代码的时间复杂度需要控制再10^8

256 MB最大也只能开 10^7 的数组

根据数据范围反推时间复杂度:

  1. 当题目数据 n<=100 -> O(n^3)
  2. 当题目数据 n<=1000 -> O(n2)或O(n2 * log(n))
  3. 当题目数据 n<=1e5 -> O(n)或O(n * log(n))
  4. 当题目数据n≤1e9 -> O(√n)

二分查找模板

//对数组[0,left-1]满足arr[i]<target,在[left,n-1]满足arr[i]>=target
//即left位置为查找元素的第一个位置
public int getLeft(int[] arr, int target) {
    int left = 0, right = arr.length - 1;
    while (left < right) {
        int mid = (left + right) / 2;
        if (arr[mid] >= target) right = mid;
        else left = mid + 1;
    }
    return left;
}

//数组的区间[0,left] 满足 arr[i]<=target ,[left+1,n-1]满足arr[i]>target;
public int getRight(int[] arr, int target) {
    int left = 0, right = arr.length - 1;
    while (left < right) {
        int mid = (left + right + 1) / 2;
        if (arr[mid] <= target) left = mid;
        else right = mid - 1;
    }
    return left;
}

进制转换

public static String fun(int x,int y){
    StringBuilder str=new StringBuilder();
    while(x>0){
        str.append(x%y);
        x/=y;
    }
    return str.reverse().toString();
}

//10进制转x进制
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int a = scanner.nextInt();
    int b=scanner.nextInt();
    String s=Integer.toString(a,b);
    s=s.toUpperCase();
    System.out.println(s);
}

//x进制转10进制
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int x = scanner.nextInt();
    char[] chars=scanner.next().toCharArray();
    int sum=0,k=1;
    for(int i=chars.length-1;i>=0;i--) {
        int res=0;
        if (chars[i]>='A' && chars[i]<='Z') {
            res=chars[i]-'A'+10;
        } else {
            res=chars[i]-'0';
        }
        sum+=res*k;
        k*=x;
    }
    System.out.println(sum);
}

标签:知识点,Java,int,蓝桥,static,new,return,public
From: https://www.cnblogs.com/Zsob/p/18279191

相关文章

  • Java高手的30k之路|面试宝典|精通MyBatis(一)
    基础知识架构图MyBatis的基本架构图,展示MyBatis核心组件及其相互关系:Configuration......
  • Java语言编程基础——总结
    目录Java基本语法语句和表达式注释关键字标识符Java基本数据类型整数类型:浮点类型:字符类型:布尔类型:Java的运算符        算术运算符:        赋值运算符:        比较运算符:        逻辑运算符:        位运算符:   ......
  • 通过更改java环境变量修改java版本不生效问题
    目录问题复现解决方法问题复现本地生产环境时java8,但是新项目需要java11.于是我下载了jdk11,并修改了环境变量。之后使用java-version,发现java版本还是8,并没没有更改成11解决方法参考文章输入wherejava将这个路径下的java.exe删除就好了。......
  • Java(Spring Boot)编程思想学习进阶书籍
    1、SpringBoot编程思想(核心篇)该书是《SpringBoot编程思想》的核心篇,开篇总览SpringBoot核心特性,接着讨论自动装配(Auto-Configuration)与SpringApplication。《SpringBoot编程思想(核心篇)》的讨论以SpringBoot为中心,议题发散至Spring技术栈、JSR及Java。希望透过全局的视角,......
  • Java Web---Filter(过滤器)
            Java过滤器是一个用来处理HTTP请求和响应的组件,它可以拦截客户端发送给服务器的请求,并在请求到达目标资源之前对请求进行修改或者对请求进行一些预处理操作。应用场景:用户权限控制:通过过滤器可以拦截用户请求,检查用户是否具有访问某个资源的权限,然后根据权......
  • 【秋招突围】2024届秋招笔试-科大讯飞笔试题-03-三语言题解(Java/Cpp/Python)
    ......
  • 已解决java.security.acl.NotOwnerException:在ACL中尝试执行非所有者的操作的正确解决
    已解决java.security.acl.NotOwnerException:在ACL中尝试执行非所有者的操作的正确解决方法,亲测有效!!!目录问题分析出现问题的场景用户类和ACL初始化报错原因解决思路解决方法1.验证所有者身份示例代码2.正确设置所有者示例代码完整示例代码主类和ACL管理代码总......
  • 已解决java.rmi.NotBoundException:RMI中没有绑定的对象的正确解决方法,亲测有效!!!
    已解决java.rmi.NotBoundException:RMI中没有绑定的对象的正确解决方法,亲测有效!!!目录问题分析出现问题的场景服务器端代码客户端代码报错原因解决思路解决方法1.绑定远程对象2.检查查找名称3.验证RMI注册表启动RMI注册表完整示例代码服务器端代码客户端代码......
  • Java随笔2
    3.构造器作用1:搭配new关键字,创建类的对象作用2:在创建对象的同时,可以给对象的相关属性赋值使用说明>构造器声明的格式:权限修饰符类名(形参列表){}>创建类以后,在没有显示提供任何构造器的情况下,系统会默认提供一个空参的构造器,且构造器的权限与类声明的权限相同。>一旦类中显示声......
  • 基于Java的小区家政服务预约平台
    作者介绍:✌全网粉丝10W+本平台特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于毕业项目实战✌一、作品包含源码+数据库+设计文档万字LW+PPT+全套环境和工具资源+部署教程二、项目技术前端......