算法
1. 四则运算,java可以用JavaScript引擎来计算,不需要复杂的算法,只是需要将{和}以及[和]替换成(和)
比如3+2*{1+2*[-4/(8-6)+7]}这样的是可以计算的
import java.util.Scanner;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
public class Main {
public static void main(String[] args) throws ScriptException{
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()) {
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
String checkString = sc.nextLine();
checkString = checkString.replace('{','(').replace('}',')');
checkString = checkString.replace('[','(').replace(']',')');
System.out.println(engine.eval(checkString));
}
}
}
2. lis(最长上升子序列) 梅花桩走法
使用java动态规划,对于每个梅花桩,跟它前面的梅花桩比较高度,如果有比自己矮的,那么最长步数就是比自己矮的梅花桩的最长步数加1再和自己当前步数取一个大的.
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
//得到输入
//桩子数目
int n = sc.nextInt();
//所有桩子
int[] checkArray = new int[n];
for (int i = 0; i < n; i++) {
checkArray[i] = sc.nextInt();
}
//每个梅花桩的最大步数
int[] maxArray = new int[n];
for (int i = 0; i < n; i++) {
maxArray[i] = 1;
for (int j = 0; j < i; j++) {
if (checkArray[j] < checkArray[i]) {
maxArray[i] = Math.max(maxArray[i],maxArray[j] + 1);
}
}
}
int max = 1;
for (int i = 0; i < maxArray.length; i++) {
if (maxArray[i] > max) {
max = maxArray[i];
}
}
System.out.println(max);
}
}
}
所有的排序都是冒泡排序的变种.
需要注意的题:梅花桩,购物单, 求int型正整数在内存中存储时1的个数,识别有效的IP地址和掩码并进行分类统计,素数伴侣,整数与IP地址间的转换,统计每个月兔子的总数,学英语,HJ52 计算字符串的距离,HJ57 高精度整数加法,HJ67 24点游戏算法,HJ77 火车进站,HJ18 识别有效的IP地址和掩码并进行分类统计,HJ19 简单错误记录
HJ24 合唱队,HJ41 称砝码,HJ44 Sudoku
二分法 单调栈 差分 滑动窗口 DFS BFS 动态规划 匈牙利算法
斐波那契数列:1 1 2 3 5 8 13 21 34 f(n)=f(n-1)+f(n-2)