Java知识总结

一、查找:

二分查找(binarySearch):要求数组已经是排好序的。(例子从小到大排好序),在数组中找出key值的索引。
	
//	方法一:非递归实现(while循环)
	public static int binarySearch1(int[] arr, int key) {
		int low = 0; // 起始索引
		int high = arr.length - 1; //末尾索引
		while (low <= high) {
			int mid = (low + high) / 2; //二分索引

			if (key == arr[mid]) { // 找到目标数
				return mid;
			} else if (key < arr[mid]) { // 目标数在左边
				high = mid - 1;
			} else { // 目标数在右边
				low = mid + 1;
			}
		}
		return -1; // 没找找目标数
	}

//	方法二:递归实现
	public static int binarySearch2(int[] arr, int key, int low, int high) {
		int mid = (low + high) / 2; // 中间索引

		if (key < arr[low] || key > arr[high] || low > high) {
			return -1;
		}
		if (key == arr[mid]) { // 找到目标数
			return mid;
		} else if (key < arr[mid]) { // 目标数在左边
			return binarySearch2(arr, key, low, mid - 1);
		} else { // 目标数在右边
			return binarySearch2(arr, key, mid + 1, high);
		}

	}

二、排序:

1、冒泡排序:每趟进行两两比较,每次最小数往上冒泡。

    for (int i = 0; i < arr.length - 1; i++) { // 外层排序次数
    			for (int j = 0; j < arr.length - 1 - i; j++) { // 内层排序次数
    				if (arr[j] > arr[j + 1]) { // 较小的数冒泡
    					int temp = arr[j];
    					arr[j] = arr[j + 1];
    					arr[j + 1] = temp;
    				}
    			}
    		}
2、快速排序:选基值,分左右,递归排。
3、插入排序:设哨兵,插最小。
	public static void insertSort(int[] arr) {
		for (int i = 1; i < arr.length; i++) {// 外层循环次数
			int key = arr[i]; // 设置哨兵
			while (i > 0 && key < arr[i - 1]) { // 遇到前面较大的数,插入该位置
				arr[i] = arr[i - 1];
				i--;
			}
			arr[i] = key; // 取出数
		}
		for (int i = 0; i < arr.length; i++) { // 遍历数组
			System.out.print(arr[i] + " ");
		}
	}

三、数的判断:

1、奇数:n/2 != 0;
2、偶数:n/2 == 0;
3、素数:
	for(int i=2;i<n;i++){	//在2到n-1区间内没有余数
		if(n/i==0){	
			return false;
		}
		return true;
	}
4、回文数:(等于字符串的反转)
	String s = x+"";	//整型转变为字符串类型
	Char[] c = s.toCharArray(); //字符串类型转变为字符数组
	for(int i=0; int j=c.length-1; i<c.length/2; i++; j--){
		if(c[i] != c[j]){
			return false;
		}
	}
5、水仙花数:
	ge = n%10; shi = n/10%10; bai = n/100%10;
	if(n == ge*ge*ge + shi*shi*shi + bai*bai*bai ){
		return true;
	}

四、递归:

1、n 的阶乘:(n>0)
		int f(n){
			if(n==1) return 1;
			if(n>1) return n*f(n-1);
		}
	2、x 的n次幂
		int f(x,n){
			if(x==0) return 0;
			else{
				if(n==0) return 1;
				else if(n==1)	return x;
				else return x*f(x,n-1);		
			}
		}

五、打印类:

1、九九乘法表:
		for(int i=1; i<10; i++){
			for(int j=1; j<10; j++){
				System.out.print(i*j+ " ");
			}
		}
2、星型打印:
		for(int i=1; i<line; i++){//控制行数
			for(int j=1; j<=line-i; j++){//控制每行的空格数
				System.out.print(" ");
			}
			for(int z=1; z<=2i-1; z++){//控制每行的星数
				System.out.print("*");
			}
		}
	
3、杨辉三角:
		int[][] arr = new int[n][n];
		for (int i = 0; i < arr.length; i++) { // 第一行和最后一行都为1
			arr[i][0] = 1;
			arr[i][i] = 1;
		}
		for (int i = 1; i < arr.length; i++) {// 其余行的填充
			for (int j = 1; j < arr.length - 1; j++) {
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
			}
		}
		for (int i = 0; i < arr.length; i++) { // 遍历二维数组
			for (int j = 0; j <= i; j++) { // 过滤默认填充的0
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}

六、while循环求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。

public static int aaSum(int a, int n) {
		int aaSum = 0;
		int i = 1;
		while (i <= n) {
			aaSum += a;
			a = (a * 10) + a;
			i++;
		}
		return aaSum;
	}

七、实现字符串反转:

1、类StringBuffer实现:
		new StringBuffer.reverse(str).reverse().toString();
2、数组实现:
		char[] c = s.toCharArray(); // 创建字符数组
		StringBuilder ss = new StringBuilder(); // 创建StringBuilder对象
		for (int i = c.length - 1; i >= 0; i--) {
			ss.append(c[i]); // 调用StringBuilder对象的append方法
		}
		return ss.toString(); // 返回字符串类型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值