算法入门(java)
Posted 微风撞见云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法入门(java)相关的知识,希望对你有一定的参考价值。
想用Java快速入门算法?这篇文章你得看!
提示:本文章适合想要入门算法,并且想 “快速” 达到一定成果的同学们阅读~ (不定期补充笔记)
文章非常非常非常长!!! 阅读需先看 “前言” 部分!!!
最近在备战蓝桥杯,还有许多笔记没有更新,省赛结束后统一更新内容
🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 数据结构与算法专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🪁 希望本文能够给读者带来一定的帮助🌸文章粗浅,敬请批评指正!🐥
文章目录
- 想用Java快速入门算法?这篇文章你得看!
- 前言
- 一、注意事项
- 二、命题范围
- 三、快捷键系列
- 四、常用知识点、思想、套路(重点一)
- 五、Algorithm(重点二)
- 总结
前言
本篇内容是我学了一段时间算法以后,自己总结的心得,可能有些地方没写的太好,请大家见谅!如有想深入了解的地方,直接搜索相关内容学习即可!
随着时代越来越卷,考验“算法”逐渐成为了求职、比赛等选拔的常用方式,而java开发的岗位也越来越多,虽然大佬们都用c++,但有时候我们不得不用java来写算法。
刚接触算法的时候没人带,大二参加过蓝桥杯,硬是用语法硬顶,拿了个省二。后来学了一段时间算法,参加“计算机能力挑战赛java程序设计”获得决赛一等奖。虽然这些比赛含金量不高,但我还是想把我辛苦记录的笔记分享给大家!如果对你有帮助,希望可以点个赞支持一下~
刷题的话,看你是哪种比赛了,蓝桥杯那种建议你先刷蓝桥里面的题试试,因为leetcode上面不会要求你输入数据来使用,都是直接给你数据,让你写出方法即可,但是蓝桥杯那一类的OI需要你对输入的数据有一定的处理能力,这点很重要。并且不要盲目刷题、不要盲目刷题、不要盲目刷题!!! 重要的事情说三遍!正确的做法是学一类刷一类,比如我最近两天刷dfs的,感觉差不多了再刷dp的,以此类推。
正片开始 ↓
一、注意事项
如果你是打蓝桥杯那种类型的比赛,一定要把样例代码复制完整、并且注意样例范围、巧用编辑器(word搜索、Excel表格等)
- 不过大多数情况不会给你太长的样例,但我还是踩过一次坑,不踩不知道,比赛时真踩到了就很伤。
- 注意样例范围,初学算法的时候大多数会想着暴力求解,这时候你就要思考用其他方式来过全部样例,例如朴素djisktra一般会爆栈,要进行堆优化等套路。
- word、excel、计算机都可以用,如果它们能帮到你,请务必使用。
二、命题范围
很多同学不知道命题范围有哪些,这里以一个不太起眼的比赛:“全国高校计算机能力挑战赛”为例,说一下命题范围。
- 数据结构:包括基础数据结构、树形结构、字符串、其他等。基本算法知识:包括基础算法、动态规划、搜索等。
- 图论:包括最短路径(单源、任意)、生成树、匹配问题、网络流、其他等。
- 数学:包括数论、组合数学、计算方法、计算几何、其他等知识。
蓝桥云课上说得更详细,比较适合想拿国奖的同学深入学习:
三、快捷键系列
Idea快捷键
public class 快捷键
/**
* ctrl+shift+enter 代码结尾补全
* ctrl+shift+Alt+J 修改同名变量
* Alt + Enter 引入类
* Ctrl+F 和 Ctrl + R 查找和替换
* ctrl + Alt + L 代码格式格式换
* ctrl + D 复制本代码到下一行
* shift + Alt + ↑或↓ 代码上下移动
* 数组名.for 快速遍历数组
* Alt + Insert set/get; 构造方法; toString; 重写方法。。。
* Ctrl+Alt+T 将代码包在一个块中,例如 while, if, try/catch等
* psvm 主函数
* sout 输出语句
* 给一小段代码添加() [],只需要选中该部分代码,然后按( [ 即可。
* 在()内直接按;可以在代码末尾添加;
*/
Eclipse快捷键
public class Zfast
/**
* alt + ctrl + ↓ 复制当前行到下一行
* alt + ↓ 移动当前行到下一行
* ctrl + shift +f 格式化
* alt + shift + a 块选择
* ctrl + 1 创建对象等补全提示 new ArrayList<>();在这里按ctrl + 1
*/
四、常用知识点、思想、套路(重点一)
多提取方法:
因为每次创建并且执行某些相同的操作,同样会花费时间,将相同的代码单独提取出来使用,用空间换时间
double科学计数eN
只有浮点类型才可以使用科学计数法形式表示。
(例如51200是一个int类型的,而512E2则是一个浮点型)
流程控制
1、continue 提前进入下一个循环 ;
2、break 结束for循环;
3、return 直接结束方法。
Three_Dimensional_Array (三维数组)
public class Three_Dimensional_Array
public static void main(String[] args)
int[][][] array = new int[3][2][3];//有三层,每层是一个2行3列的二维数组
array = new int[][][] //创建并初始化数组
1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18
;
for (int i = 0; i < array.length; i++)
System.out.println("这是第 " + i + " 层");
for (int j = 0; j < array[0].length; j++)
for (int k = 0; k < array[0][0].length; k++)
System.out.print(array[i][j][k] + " ");
System.out.println();
/* //foreach的遍历方式 ——每个循环的状态更直观
for (int[][] is : array) //遍历数组
for (int[] is2 : is)
for (int i : is2)
System.out.print(i + "\\t");
*/
Scanner
0、无限输入,回车结束
public static void main(String[] args)
Scanner scanner = new Scanner(System.in);
while (true)
String next = scanner.nextLine();
if (!next.equals("")) System.out.println("有效");
else break;
1、输入整数、字符串数组
第一行输入n, m
第二行输入n个整数
第三行输入m个字符串
//导入包
import java.util.Scanner;
import java.util.Arrays;
public class MyScanner
public static void main(String[] args)
//创建对象
Scanner sc = new Scanner(System.in);
System.out.println("输入数据:");
//多行输入
int n = sc.nextInt();
int m = sc.nextInt();
int[] arr = new int[n];
String[] str = new String[m];
//int等基本数据类型的数组,用nextInt(),同行或不同都可以
for(int i=0; i<n; i++)
arr[i] = sc.nextInt();
//String字符串数组, 读取用next(),以空格划分
for(int i=0; i<m; i++)
str[i] = sc.next();
//调用方法进行操作
TestSc(n, m, arr);
TestStr(str);
System.out.println("Test01 End");
//关闭
sc.close();
public static void TestSc(int n, int m, int[] arr)
System.out.println("数据n:" + n + ", 数据m:" + m);
System.out.println(Arrays.toString(arr));
public static void TestStr(String[] str)
System.out.println(Arrays.toString(str));
若输入的字符串中想要包含空格,使用scanner.nextLine()换行后用scanner.nextLine()进行读入,见情形7.
2、输入二维数组
第一行输入n, m
第二行开始输入二维数组。
import java.util.Arrays;
import java.util.Scanner;
public class MyScanner2
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
System.out.println("输入数据:");
//二维数组
int n = sc.nextInt();
int m = sc.nextInt();
int[][] arr2 = new int[n][m];
System.out.println("Test02 输入二维数组数据:");
//可以直接读入
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
arr2[i][j] = sc.nextInt();
TestSc(n, m, arr2);
//关闭
sc.close();
public static void TestSc(int n, int m, int[][] arr)
System.out.println("数据n:" + n + ", 数据m:" + m);
for(int i=0; i<n; i++)
System.out.println(Arrays.toString(arr[i]));
System.out.println("数组行数: arr.length= "+ arr.length);
System.out.println("数组列数: arr[0].length= "+ arr[0].length);
3、输入字符串
输入字符串,用空格隔开。
next()和nextLine()区别。
import java.util.Scanner;
/*
*next()读取到空白停止,在读取输入后将光标放在同一行中。
*nextLine()读取到回车停止 ,在读取输入后将光标放在下一行。
*/
public class MyScanner3
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
System.out.println("输入字符串:");
//next():只读取输入直到空格。
String str = sc.next();
//nextLine():读取输入,包括单词之间的空格和除回车以外的所有符号
String str2 = sc.nextLine();
System.out.println("str:" + str);
System.out.println("str2:" + str2);
//关闭
sc.close();
4、输入字符串分割为数组
先用scanner.nextLine()读入字符串,再将字符串分割为字符数组或字符串数组。
import java.util.*;
public class MyScanner4
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
System.out.println("输入字符串数组:");
String str;
str = sc.nextLine();
char[] ch = new char[str.length()];
for(int i=0; i<str.length(); i++)
//用charAt();进行定位分隔
ch[i] = str.charAt(i);
System.out.println(ch[i] + " ");
System.out.println("END");
//读入字符串后,用空格分隔为数组
String[] strs = str.split(" ");
System.out.println(Arrays.toString(strs));
5、连续输入数字和字符串
区别于情形1,对于不能采用for循环的方式获取String。采用情形5,6用来处理。
采用while(scanner.hasNext()) 循环,实现连续输入。
格式:数字,空格,字符串。
或: 数字,回车,字符串
import java.util.Scanner;
public class MyScanner5
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
while(sc.hasNext())
int n = sc.nextInt();
String str = sc.next();
Tes(n, str);
sc.close();
public static void Tes(int n, String str)
System.out.println("n = " + n);
System.out.println("str = " + str);
System.out.println("str.length = " + str.length());
6、换行输入数字和字符串
也采用scanner.nextLine(),将光标移到下一行。再继续读入字符串。
第一行输入整数n,m,第二行开始输入字符串。或
第一行输入整数n,第二行输入m,第三行开始输入字符串。
import java.util.*;
public class MyScanner6
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
//注意!!!光标换到下一行
sc.nextLine();
String s = sc.nextLine();
String str = sc.nextLine();
System.out.println("n = " + n + " , m = " + m);
System.out.println("s = " + s);
System.out.println("str = " + str);
以上是关于算法入门(java)的主要内容,如果未能解决你的问题,请参考以下文章