蓝桥杯Java组常用知识点

news/2024/7/4 14:15:54/文章来源:https://www.cnblogs.com/Zsob/p/18279191

基本数据类型

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>() {@Overridepublic 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) {}

蓝桥杯准备

材料

  • 蓝桥杯真题

  • 2023年第十四届蓝桥杯大赛软件类省赛Java研究生组真题 - 题库 - C语言网 (dotcpp.com)

  • 第十四届蓝桥杯javaA组2023年省赛初赛题解_蓝桥杯java组历年真题下载-CSDN博客

  • 2023年第十四届蓝桥杯JavaB组省赛真题(题目+全部完整题解)_蓝桥杯java历年真题及答案整理(共100道-CSDN博客

  • 2021蓝桥杯Java复习【史上最详细攻略】【持续更新】_蓝桥杯java组经验贴-CSDN博客

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);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/736153.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux内存不够了?看看如何开启虚拟内存增加内存使用量

1、为什么要使用虚拟内存 当我们没有多余的钱去购买大内存的云服务器时,但是当前服务器里面的软件和程序运行的比较多导致内存不够用了。这个时候可以通过增加虚拟内存来扩大内存容量。但是在启用虚拟内存时,需要仔细考虑系统的实际需求和硬件配置,以及权衡虚拟内存的优缺点…

camunda数据库表结构详细说明

本文基于Camunda7.19.0版本,介绍Camunda开源工作流引擎的数据库架构和ER模型,Camunda7.19.0共49张表,包括了BPMN流程引擎、DMN规则引擎、CMMN引擎、历史数据、用户身份等方面的表结构定义,以及表与表之间的关联关系。本文基于Camunda7.19.0版本,介绍Camunda开源工作流引擎…

camunda多租户技术架构介绍和测试验证

多租户考虑的是单个 Camunda 安装应该为多个租户提供服务的情况。对于每个租户,应做出一定的隔离保证。例如,一个租户的流程实例不应干扰另一租户的流程实例。 多租户可以通过两种不同的方式实现。一种方法是每个租户使用一个流程引擎。另一种方法是仅使用一个流程引擎并将数…

IEEE 8802-3 以太网标准解读

PHY: CarrierSense 载波侦听 ReceveDataValid 接受数据有效 CollisionDetect 碰撞检测 Transmitting 传输中 TransmitBit 传输比特 SFD 10101011 开始 ReceiveBit 接受比特 Wait 等待1、MA_DATA.request 定义了MAC客户端访问单独实体或者z在组地址的前提下访问多个实体 MA…

在C#中使用RabbitMQ做个简单的发送邮件小项目

在C#中使用RabbitMQ做个简单的发送邮件小项目 前言 好久没有做项目了,这次做一个发送邮件的小项目。发邮件是一个比较耗时的操作,之前在我的个人博客里面回复评论和友链申请是会通过发送邮件来通知对方的,不过当时只是简单的进行了异步操作。 那么这次来使用RabbitMQ去统一发…

【进阶篇】Java 项目中对使用递归的理解分享

笔者在最近的项目开发中,遇到了两个父子关系紧密相关的场景:评论树结构、部门树结构。具体的需求如:找出某条评论下的所有子评论id集合,找出某个部门下所有的子部门id集合。【进阶篇】Java 项目中对使用递归的理解分享 目录【进阶篇】Java 项目中对使用递归的理解分享前言一…

C#/.NET/.NET Core编程技巧练习集(学习,实践干货)

DotNet Exercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程常用语法、算法、技巧、中间件、类库练习集,配套详细的文章教程讲解,助你快速掌握C#/.NET/.NET Core各种编程常用语法、算法、技巧、中间件、类库等等。GitHub开源地址:https://github.com/YSGStudyHards/DotNetE…

2024年6月文章一览

2024年6月编程人总共更新了5篇文章: 1.2024年5月文章一览 2.《编译原理》阅读笔记:p18 3.《编译原理》阅读笔记:p19-p24 4.《编译原理》阅读笔记:p25-p32 5.《Programming from the Ground Up》阅读笔记:p1-p18 6月再挖一个坑,开始《Programming from the Ground Up》的学…

【论文阅读】自动驾驶光流任务 DeFlow: Decoder of Scene Flow Network in Autonomous Driving

再一次轮到讲自己的paper!耶,宣传一下自己的工作,顺便完成中文博客的解读 方便大家讨论。Title PictureReference and pictures paper: https://arxiv.org/abs/2401.16122 code: https://github.com/KTH-RPL/DeFlow b站视频: https://www.bilibili.com/video/BV1GH4y1w7LQ1.…

利用SonarCloud和Azure DevOps提升代码质量

利用SonarCloud和Azure DevOps提升代码质量 在软件开发过程中,代码质量是至关重要的。为了确保代码的清洁和安全性,我们可以使用SonarCloud——一个基于云的代码质量与安全服务。SonarCloud不仅对开源项目免费,还为私有项目提供了14天的免费试用。本文将指导您如何将SonarCl…

免费申请一张SSL证书-包含100个域名-挑战!!

挑战一下,申请一张包含100个域名的证书 首先,我们访问来此加密网站,进入登录页面,输入我的账号密码。登录后,咱们就可以开始申请证书,首先说一下,咱账号是SVIP哦,只有SVIP才可以申请包含100个域名的证书。为了方便验证,咱么先添加一下域名接口,这样可以自动配置验证信…

.net6+ 在单文件应用程序中获取程序集位置

一般来说,获取执行程序集的位置,您可以调用: var executableDirectory = System.Reflection.Assembly.GetExecutingAssembly().Location;如果发布为单个文件, 会提示如下警告 warning IL3000: System.Reflection.Assembly.Location always returns an empty string for assemb…

(set+拓扑排序) CF1572A Book

题意:思路: 每本书之间很明显存在拓扑关系,由此想到拓扑排序。使用set对图进行拓扑排序,将阅读次数小的放在前面,若阅读次数相同则按照阅读章节编号排序。假设第 x 章在第 y 章理解之后就能理解,若 x 大于 y 则本次阅读就可以理解 x 章,否则需要下一次才能理解第 x 章。 …

【github报错解决】Failed to connect to github.com port 443: Couldnt connect to server

今天使用github push时候报错的 解决办法: 1、查看本机代理 路径:设置->网络和Internet->代理->地址:端口 2、用git cmd修改配置,port就用刚刚代理端口值git config --global http.proxy http://127.0.0.1:[port] git config --global https.proxy http://127.0.0…

LVGL组件

LVGL组件的使用 目录LVGL组件的使用1 . 父和子对象2. 部件的基本属性及设置3. 图解:还有其他样式可以设置2. 组件分类 1 . 父和子对象2. 部件的基本属性及设置 /******** 设置打小 ********/ /******** 注意:设置部件位置时,坐标原点在父对象的左上角 ********/ lv_…

Maven 笔记

开发工具:Maven相关内容笔记# Maven简介 Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)) 这玩意儿是使用Java开发的,所以采用的就是Java的思想:面向对象 POM (Project Object Model):项目对象模型Maven的作用:项目构建:提供标准的、…

202406月度小结

这个学期比上个学期有意思得多了。但是为什么我只写了6月小结,没有写3月4月5月小结呢?因为那时候还没有想到用博客写这种小结形式的随笔啦…… 横向对比,这四个月都挺有意思的。但是由于我太容易忘记事情了……我的记忆是有限的,先把6月发生的趣事赶紧记录下来比较好。 昨天…

大模型技术方向Task1笔记

赛题概要 一、赛事背景 在当今数字化时代,企业积累了丰富的对话数据,这些数据不仅是客户与企业之间交流的记录,更是隐藏着宝贵信息的宝库。在这个背景下,群聊对话分角色要素提取成为了企业营销和服务的一项重要策略。 群聊对话分角色要素提取的理念是基于企业对话数据的深度…

[LeetCode] 122. Best Time to Buy and Sell Stock II

medium是你的谎言. class Solution:def maxProfit(self, prices: List[int]) -> int:#1if len(prices) == 1:return 0#elsemax_profit = 0min_price = prices[0]for i, element in enumerate(prices):#find a min_price if element <= min_price:min_price = elementelse…

【esp32 学习笔记】esp-idf学会调用组件管理——以button

简单不看版——esp-idf组件管理步骤 在ESP-IDF 组件管理器网页(https://components.espressif.com/)搜索我们需要的组件,比如【button】,然后 点开相应的组件,比如 espressif/button 组件。 【关键步骤】复制相关组件界面上配置组件的命令 ,形如:idf.py add-dependency &…