网站建设如何跑单子seo搜索引擎优化薪酬
常数操作:一个操作如果跟样本数据量无关,每次都是固定时间完成,这叫常数操作。
时间复杂度:一个算法流程中的常数操作的表达式。粗描了一个算法流程。
//1.数据量无关:
int t=3+5;
int p =t>>1;
//2.数组寻址 系统偏移量去拿的
int [] arr =new int[200万]//3.链表
int p=list.get(100万+1)
1.二分法的详解与扩展
1.在一个有序数组中,找到某个数是否存在
2.在一个有序数组中,找>=某个数最左侧的位置
3.局部最小值问题
2.异或运算
1.异或运算=无进位相加
2.异或运算满足交换律和结合律(a^b=b^a )(a^b)^c=a^(b^c)
3.不用额外变量交换两个数
a=a^b
b=a^b
a=a^b
4.一个数组中出现了奇数次,其他出现了偶数次,怎么找到这个数
5.一个数组中有两个数出现了奇数次,其他出现了偶数次,怎么找到这两个数
int right=eor&(~eor+1) //提取出最右的1
3.对数器:测试是否正确。
void main()
{int testTime=50000; //1.测试次数int maxSize=100; //2.数组的规模不大于100int maxVaule=100; //3.每个值的范围-100 100bool suceed =true;for(int i=0;i<testTime;i++){int []arr1=generateRandomArray(maxSize,maxValue); //1.生成随机数组int []arr2=copyArry(arr1);selectionSort(arr1); //2.运行 我的程序comparator(arr2); // 系统程序if(!isEqual(arr1,arr2)) //3.比对结果{succeed=false; //如果不一样,不失败printArray(arr1);printArray(arr2);break;}}//print(结果是否正确!)int [] arr=generateRandomArray(maxSize,maxValue);printArray(arr);selectionSort(arr);printArray(arr);}
生成随机数:所有数等概率的回一个。
//随机数产生,等概率产生int generatrRandomArray(int maxSize,int maxValue)
{//Math.random() ->[0,1) double//Math.random() *A ->[0,A) ->[0,A-1] int//(int)(Math.random() *A) ->[0,A-1] int//1.长度随机 值随机int [] arr= new int[(int)((maxSize+1)*Math.random())];for(int i=0;i< arr.length;i++){arr[i]=(int)((maxValue+1)*Math.random())-(int)(maxValue*Math.randome())}return arr;
}int copyArray(int [] arr)
{if(arr==null){return null;}int [] res= new int[arr.length];for(int i=0;i<arr.length;i++){res[i]=arr[i];}return res;
}void comparator(int[] arr)
{Arrays.sort(arr);
}