内存模型(三令五申):
栈(stack):存基本数据类型;例:int i = 9;
堆(heap):存引用数据类型;例:int score = new int[]{1,2,3,4,5};
public static void main(String[] args) { int a[] = new int[]{1,2,3,4,5}; System.out.println(a); a = new int[]{1,2,3,4}; System.out.println(a); //如果数组new int[]{1,2,3,4,5}不被指向,会自动销毁。 }
程序 = 数据结构 + 算法
数据结构:数据如何存储。
计算机算法:是用计算机解决某个问题的方法,步骤。
如何衡量算法的优劣
解题四件套
1.审题
2.找出所有解(找出解决问题的所有方法),找出最优解
时间(速度),空间(占用内存);
3.编码
4.测试
时间复杂度
时间复杂度:是一个函数,反映的是数据规模发生变化时,算法执行时间的趋势变化;
时间复杂度的作用:衡量算法优劣的函数;
大o表示法下常见的时间复杂度:n表示的是数据规模;
O(1):常数复杂度
O(log n):对数复杂度,多在二分法中出现;
O(n):线性复杂度,多在一次循环出现;
O(nlongn):多在快速排序,归并排序中出现;
O(n方):多在双层循环中出现;
O(n立方):多在三层循环出现;
O(2的n次方):易崩溃;
O(n!):易崩溃;
注意:多在......中出现,说明拥有该结构的程序,一定是其对应的时间复杂度。
例:出现单次循环,时间复杂度为O(n);
时间复杂度(大O表示法)的推导
1.如果时间复杂度是一个常数,则统一记作O(1);
2.如果不是O(1),则去掉常数;例:计算得O(2n)记作O(n);
3.一个复杂的函数表达式中,只保留最高阶;例:O(n方+2N)记作O(n方);
java如何输出程序运行时间
long start = System.currentTimeMillis();
long end = System.currentTimeMillis();
System.out.println(end-start);