> 文章列表 > 蓝桥杯-算法解题思路+注意事项

蓝桥杯-算法解题思路+注意事项

蓝桥杯-算法解题思路+注意事项

蓝桥杯注意事项和常错基本知识

  1. 遇到填空题,只需要填写一个数字。像回文数字,用暴力解题法,自己想或者借助计算机用眼睛看出来,写多不得分。

  2. ‘B’ - ‘A’ = 1

  3. 遇到长数字要翻转的,要用/10方法不能用string,因为会溢出。

  4. 遇到字符串计数的,可以用固定分配28个空间的字符数组,分别计算。
    char[] chs = scanner.nextLine().toCharArray();
    counts[chs[i] - ‘A’] += 1;

  5. Arrays.sort(int[] a)
    这种形式是对一个数组的所有元素进行排序,并且是按从小到大的顺序。

  6. Arrays.sort(int[] a, int fromIndex, int toIndex)
    这种形式是对数组部分排序,也就是对数组a的下标从fromIndex到toIndex-1的元素排序,注意:下标为toIndex的元素不参与排序。

  7. 10进制转16进制:System.out.printf(“%X”, n);

  8. 16进制转10进制 :
    String string = scanner.nextLine();
    System.out.print(Long.valueOf(string,16));

    int x=Integer.parseInt(str,16);输入的是不带0x表示的十六进制数,直接转换即可
    int x=Integer.parseInt(str.substring(2),16); 输入的是带有0x标识的十六进制数,需要截去前面两位标识

  9. Math.pow(底数,几次方)

  10. char(int):根据ascii码取得其对应的字符

  11. Integer.toBinaryString(int i):返回int变量的二进制表示的字符串。

  12. toString() : 把对象转成字符串

  13. String str [] = s.nextLine().trim().split(" ");//把输入的字符串去掉首尾的空格后以" "为条件分割成一个String数组。

  14. Date时要注意时区问题,我们是东8区,一开始是1900-01-01 8:00:00所有要减去8个小时的毫秒数

  15. long n = sc.nextLong(); n-=8*3600*1000; Date date = new Date(n); SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); System.out.println(format.format(date));

  16. 将ASCII码转为大写字母 int i = ‘A’+1; //66
    char res = (char)i;
    //B

考察内容

计算机算法:
枚举、排序、搜索、计数、贪心、动态规划、图论、数论、博弈论*、概率论*、计算几何*、字符串算法等。
数据结构:
数组、对象/结构、字符串、队列、栈、树、图、堆、平衡树/线段树、复杂数据结构*、嵌套数据结构*等

考试时注意

Java 选手请务必不要使用 package 语句,并且确保自己的主类名称为 Main,否则会导
致评测系统运行时找不到主类而得 0 分。
Java 选手如果程序中引用了类库,在提交时必须将 import 语句与程序的
其他部分同时提交。只允许使用 Java 自带的类库。

字符

给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。

蓝桥杯-算法解题思路+注意事项

这里是26为一个循环,可以想象成是26进制的数。
最后检查字符串的顺序是否正确
Character character = (char) (‘A’ + 28 % 26); 答案为C

public String convertToTitle(int columnNumber) {StringBuffer sb = new StringBuffer();while (columnNumber != 0) {columnNumber--;sb.append((char)(columnNumber % 26 + 'A'));columnNumber /= 26;}return sb.reverse().toString();}

另一种简洁的写法

public String convertToTitle(int columnNumber) {return columnNumber == 0 ? "" : convertToTitle(--columnNumber / 26) + (char)('A' + (columnNumber % 26));}

反过来

public int titleToNumber(String columnTitle) {int ans = 0;for(int i = 0; i < columnTitle.length(); i++){ans = ans*26+(columnTitle.charAt(i)-'A'+1);}return ans;}

二叉树的前序、中序、后序遍历

 public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val = val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}}public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();preorder(root, res);return res;}public void preorder(TreeNode root, List<Integer> res) {if (root == null) {return;}res.add(root.val); //前序遍历preorder(root.left, res);preorder(root.right, res);}

爬楼梯(可以爬1/2个台阶)和斐波拉契数列

public int climbStairs(int n) {if (n==0||n==1 || n==2) {return n;}int first=1,two=2;int sum=0;for (int i = 3; i <= n; i++) {sum=first+two;first=two;two=sum;}return sum;}

星期问题

已知今天是星期六,请问 20 22 ^{22} 22 天后是星期几?
1 到 7 表示星期一到星期日

一般是mod 7求重复的数;这时可以借助计算器
注意 如果用代码计算要防止 int 会溢出;这时用BigInteger

返回数组的形式

蓝桥杯-算法解题思路+注意事项

熟悉JDK的好处:

颠倒给定的 32 位无符号整数的二进制位
蓝桥杯-算法解题思路+注意事项

public int reverseBits(int n) {return Integer.reverse(n); }

查看是否超时

public static void main(String[] args) {long start = System.currentTimeMillis();//你写的程序long end = System.currentTimeMillis();System.out.println(end-start);}

注意:默认的是毫秒值,1s = 1000ms

输入输出,读写用法的区别

public static void main(String[] args) {Scanner sc = new Scanner(System.in);sc.next(); //空格、tab键、enter键看成分隔符/结束符,开头会忽略,结尾遇到会结束sc.nextLine();//遇到空格会读取,遇到enter会结束}

注意:bufferreader虽然快,但是简单读取字符序列。使用的对象是readline,必须处理掉Java. io .exception异常

格式化输出

public static void main(String[] args) {Date date = new Date();String f = "yyyy-MM-dd HH:mm:ss";SimpleDateFormat sdf = new SimpleDateFormat(f);System.out.println(sdf.format(date));}

常用API

	String string ;string.charAt(index); //找出对应下标的字符string.toCharArray();//将字符串变成字符数组string.contains(s);//是否包含string.split(" ");//用字符串分割
StringBuilder stringBuilder;stringBuilder.reverse();//反转//没有equals方法,所以比较的是两个对象的地址是否相等。要转为string类型!!!
Calendar calendar = Calendar.getInstance();//没有new方法calendar.set(Calendar.YEAR, 2023);calendar.set(Calendar.MONTH, 0); //1月份calendar.set(Calendar.DAY_OF_WEEK, 1); //周日System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
		BigInteger bigInteger;bigInteger.abs(a);//绝对值bigInteger.add(a);bigInteger.subtract(val);bigInteger.multiply(val);bigInteger.divide(val); //除bigInteger.mod(m); //取模bigInteger.remainder(val);//求余bigInteger.pow(exponent); //次方bigInteger.negate(); //相反数bigInteger.compareTo(val);//1,表示大于;0表示等于

二维数组的另类设置

   	List<Integer> t = new ArrayList<Integer>();List<List<Integer>> ans = new ArrayList<List<Integer>>();Collections.sort(ans);//记得要用collectionS

最后,给eclipse设置代码自动提示功能,加快效率

蓝桥杯-算法解题思路+注意事项
蓝桥杯-算法解题思路+注意事项