首页 > 编程语言 > 详细

基础知识补全,数组算法入门

时间:2020-08-08 10:06:16      阅读:85      评论:0      收藏:0      [点我收藏+]

前言:你好未来的自己!你好陌生人!简单的自我总结.没有什么营养.泄泄狂神

基础知识补全,数组算法入门

数据结构

  • 基本结构:除特殊情况外,java的代码运行顺序为同级自上而下运行.(拓展:但是编译器有优化机制,会进行指令重排,单线程没有关系,多线程可能会出现线程安全)
  • 选择结构:if/switch判断:if单选 switch可多选
  • 循环结构:for/增强for循环/while/do...while循环,for判断循环.增强for是遍历数组.while和for一样.do...while是先执行代码后判断

方法的重载

请区别方法的重写.重载是指同名方法不同的传参.与返回值无关.

重写是重写对应的方法.方法生明必须一致,包括修饰符返回值方法名,参数

可变参数

这个用的比较少.方法传递参数的最后一个参数不能确定其数量就可以使用可变参数

例如:

public static void main(String[] args) {
    test1(1,77,44,22);//77,44,22代表c
}

private static void test1(int a,int... c) { //这个c本质是一个数组

}

注意的是,只能有一个可变参数,且只能是最后一个参数

递归

自己调用自己.

必须设置递归出口,不然就是死循环

把上一次调用自己的值作为参数再计算,就可以使用递归.完全可以被迭代替代

数组

数组一旦开辟空间,定义好了长度就不能再改变.有序可以通过下标(索引)找到对应的值

//一维数组:
int[] arr = new [10]; int[] arr = {xx,xx}
//二维数组:
int[][] arr = new [10][10] ;

反转数组

创建一个新的数组,同等长度

原数组1赋值给新数组的末尾.循环返回新数组完成反转

稀疏数组

稀疏数组的定义:

原二维数组,里面有很多重复的数据.将其转换成稀疏数组压缩空间

我做了一个压缩重复值为0的utils包...其他数字可能需要使用填充

请看:

  • 二维数组转成压缩0的稀疏数组
public static int[][] getXiShuInt(int[][] arr,int a){
        if (arr == null) {
            return new int[0][0];
        }


        //统计有多少个不同的数据
        int sum = 0;
        //循环二维数组
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                if (arr[i][j]!=a){
                    sum++;
                }
            }
        }
        //创建稀疏数组
        int[][] array = new int[3][sum+1];
        //给系数数组添加表头
        array[0][0]=arr.length;
        array[0][1]=arr[0].length;
        array[0][2]=sum;
        //统计个数
        int cunit = 0 ;
        //遍历原数组获得差异数据的信息
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                if (arr[i][j]!=a){
                   cunit++;
                   array[cunit][0]=i;
                   array[cunit][1]=j;
                   array[cunit][2]=arr[i][j];
                }
            }
        }
        return array;
    }
  • 将稀疏数组解压成二维数组
public static int[][] XiShuToArr(int[][] xi){
        //创建一个二维数组
        int[][] arr = new int[xi[0][0]][xi[0][1]];
        for (int i = 1; i < xi[0].length; i++) {
            arr[xi[i][0]][xi[i][1]] = xi[i][2];
        }
        return arr;
    }

总结:

将原二维数组转换成 固定一维3的新二维数组 [0]记录的是二维数组声明空间信息.往后都是记录不通值的坐标+数值.依次传入新二维数组.从而压缩了原来所有的数值<扎总结>

常用api

  • Scanner,控制台交互对象.next和nexLine的区别. next以空格为终止符,line是回车使用line
  • Arrays数组工具:目前会用的就是toString和sort排序,fill填充

今天是第3天写博客,坚持.坚持26天养成一种习惯.加油!

基础知识补全,数组算法入门

原文:https://www.cnblogs.com/Mr-Dacon/p/13456529.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!