JAVA面试中常问算法-数组-回型数,杨辉三角

    for(int i=1;i< arr.length;i ++){

        if(maxVal < arr[i]){

            maxVal = arr[i];

        }

    }

    System.out.println("最大值" + maxVal);

    //求最小值

    int minVal=arr[0];

    for(int i=1;i< arr.length;i ++){

        if(minVal > arr[i]){

            minVal = arr[i];

        }

    }

    System.out.println("最小值" + minVal);

    //求和

    int sum = 0;

    for(int i=0;i < arr.length;i ++){

        sum += arr[i];

    }

    System.out.println("和=" + sum);

    //求平均值

    int mean=sum / arr.length;

    System.out.println("平均值=" + mean);



}

}

	//查看所有随机数34	查看所有随机数46	查看所有随机数85	查看所有随机数71	查看所有随机数33	查看所有随机数30	查看所有随机数65	查看所有随机数79	查看所有随机数17	查看所有随机数25	

	//最大值85

    //最小值17

   //和=485

   //平均值=48



[]( )数组复制

=======================================================================



1.  数组赋值不能直接将arr1赋值给arr2,这样只是将arr1的堆区域地址赋给了他,当我们对arr2进行改变时,arr1也会改变  

    错误示例:



public class copyArryTest7 {

public static void main(String[] args) {

    int[] arr1=new int[]{1,6,3,78};

    int[] arr2=arr1;

    for (int i=0;i< arr2.length;i ++){

        if(i %2 == 0){

            arr2[i]=i;

        }

    }

    for (int i=0;i < arr1.length; i++){

        System.out.print("arr1值:");

        System.out.print( arr1[i]  +"\t");

    }

}

}

//arr1值:0	arr1值:6	arr1值:2	arr1值:78



2.  正确做法是new出来一个新的,并遍历重新赋值



public class copyArryTest7 {

public static void main(String[] args) {

    int[] arr1=new int[]{1,6,3,78};

    int[] arr2=new int[arr1.length];

    for (int i=0;i< arr1.length;i ++){

        arr2[i]=arr1[i];

    }

 }

}




[]( )数组反转

=======================================================================



1.  这里反转执行长度为arr1.length / 2,也就是只是一半的交换,如果是arr1.length那么又会换回来

2.  需要定义一个中间变量暂时进行缓存



public static void main(String[] args) {

    String[] arr1=new String[]{"aa","bb","cc","dd"};

    for(int i=0; i < arr1.length / 2;i ++){

        String temp=arr1[i];//中间变量temp缓存

        arr1[i]=arr1[arr1.length - i - 1];

        arr1[arr1.length - i -1]=temp;

    }

    for(int i=0;i < arr1.length;i ++){

        System.out.println(arr1[i]);

    }

}

}

//dd cc bb aa



[]( )查找(普通查找和二分法查找)

=================================================================================



1.  普通查找只需遍历所有数组,判断是否相等

2.  二分法查找有个前提条件,必须是有序列表,每次取中间值进行比较,然后缩减范围



public class findArryTest9 {

public static void main(String[] args) {

    int[] arr=new int[]{-6,3,6,9,13};

    //普通查找

    boolean isFind1=true;

    int num=13;

    for(int i=0;i < arr.length;i ++){

        if(num == arr[i]){

            System.out.println("找到了,位置在" + i);

            isFind1=false;

            break;

        }

    }

    

    if(isFind1){

        System.out.println("没找到");

    }

    //二分法查找

    int num2=13;

    int start=0;

    int end= arr.length;

    boolean isFind2=true;

    while(start <= end){

        int middle=(start +end) /2;

        if(num2 == arr[middle]){

            System.out.println("找到了,位置在" + middle);

            isFind2=false;

            break;

        }else if(num2 > arr[middle]){

            start =middle;

        }else if(num2 < arr[middle]){

            end=middle;

        }



    }

    if(isFind2){

        System.out.println("没找到");

    }

}

}




[]( )冒泡排序

=======================================================================



1.  两两之间相互比较,大的向后移

2.  一共执行arr.length-1轮排序



public class sortTest10 {

public static void main(String[] args) {

    int[] arr=new int[]{0,4,89,23,-5};

    for(int i=0;i < arr.length;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;

            }

        }

    }

    for (int i = 0;i < arr.length;i ++){

        System.out.print(arr[i] + "\t");

    }

}

}

//-5	0	4	23	89



[]( )回形数

======================================================================



1.  首先定义最小,最大X轴值,最小,最大y轴值,以及初始值

2.  首先X1每次值增长到Y轴最大值,然后从这里继续向下增长到X轴最大值,顺着X轴增长到Y轴最小值,然后回到Xmin+1轴位置



public class arrTest5 {

public static void main(String[] args) {

    int num=7;

    int[][] arr=new int[7][7];

    int count=0;//用于显示的起始数据

    int maxX=num - 1;//X轴最大下标

    int maxY=num - 1;//Y轴最大下标

    int minX=0;//X轴最小下标

    int minY=0;//Y轴最小下标

    while(minX <= maxX){

    	//X1轴增长到7

        for(int x=minX;x<= maxX;x++){

            arr[minY][x]=++ count;

        }

        //就表示X1轴不存在了,下次从X2轴走起

        minY++;

        //Y7轴增长到13

        for(int y=minY;y<=maxY;y++){

            arr[y][maxX]=++ count;

        }

        //Y7轴也就不存在了

        maxX--;

        //X7轴从右向左增长到19

        for(int x=maxX;x >=minX; x--){

            arr[maxY][x]=++ count;

        }

        //X7轴也就不存在了

        maxY--;

        //Y1轴从下面增长到x2轴到24

        for(int y=maxY;y>= minY;y--){

            arr[y][minX]=++ count;

        }

        //Y1轴也就不存在了

        minX++;

    }

    for(int i=0;i<arr.length;i++){

        for(int j=0;j<arr.length;j++){

            System.out.print(arr[i][j] + " ");

        }

        System.out.println(" \t");

    }

    }

}

//1 2 3 4 5 6 7 	

//24 25 26 27 28 29 8 	

//23 40 41 42 43 30 9 	

//22 39 48 49 44 31 10 	

//21 38 47 46 45 32 11 	

//20 37 36 35 34 33 12 	

//19 18 17 16 15 14 13 	



[]( )杨辉三角

=======================================================================



1.  双层for循环

2.  这是杨辉三角公式 yanghui\[i\]\[j\]=yanghui\[i-1\]\[j-1\] + yanghui\[i-1\]\[j\]



public class arryTest5 {

public static void main(String[] args) {

    int[][] yanghui=new int[10][];

    //给每行定义有多少个数字

    for (int i=0;i<yanghui.length;i++){

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
自己不成体系的自学效果低效漫长且无助。**

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-uWwVUyhB-1715532947844)]

[外链图片转存中…(img-avLlsSlN-1715532947845)]

[外链图片转存中…(img-L8MIXv9Q-1715532947845)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值