二分法查找算法
package SuanFa; import java.text.SimpleDateFormat; import java.util.Date; public class Demo1 { public static void main(String []args){ int []arr={1,3,5,7,9,11,12,13,15,16,18,19,20}; int a=rank(100,arr); System.out.println(a); System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(new Date())); } static int rank(int key,int []arr){ int start=0; int end=arr.length-1; while (start<=end){ int mid=start+((end-start)/2); if(key<arr[mid])end=mid-1; else if(key>arr[mid])start=mid+1; else return mid; } return -1; } }
试用与有序集合
优化版,支持括号内多个运算符
package SuanFa; import java.util.Stack; public class StackCalculateExpression { public static void calculate(char[] cArr){ //定义一个运算符栈 Stack<String> ops =new Stack<String>(); //定义一个操作数栈 Stack<Integer> vals=new Stack<Integer>(); //遍历出所有的操作数和运算符 for(char c:cArr){ String str=String.valueOf(c); if(str.equals("(")) ops.push("("); else if(str.equals("+")) ops.push(str); else if(str.equals("-")) ops.push(str); else if(str.equals("*")) ops.push(str); else if(str.equals("/")) ops.push(str); else if(str.equals(")")){ String op=""; while ((op=ops.pop())!="(") { Integer v = vals.pop(); if (op.equals("+")) v = vals.pop() + v; else if (op.equals("-")) v = vals.pop() - v; else if (op.equals("*")) v = vals.pop() * v; else if (op.equals("/")) v = vals.pop() / v; vals.push(v); } }else vals.push(Integer.parseInt(str)); } System.out.println(vals.pop()); } public static void main(String[] args) { String str="(1+((1+3+1+3+2)*(2*3)))"; calculate(str.toCharArray()); } }