数组array

数组

注意:一旦初始化完成,数组的长度就确定了且!不可更改

创建时,在内存中开辟一整块"连续的空间",

二维数组

java 复制代码
int[][] arr1 = new int[][]{{123},{321,12}};
int[][] arr3 = new int[2][]; // 因为内层未声明,外层元素,默认存储null
// int 外层 内层 变量名 = new int 外层 内层;
/**
声明两个一维数组x,y;
*/
int[] x,y;
// =====
int[] x,y[];
//y是二维,
// x是一维;

常见算法

1、数值型数据的特征统计;(均值,最大、小值;总和)

java 复制代码
public static void main(String[] args) {
//        一、求特征值;
        /*一个数组,10个元素,随机整数,求出最大、小、总和;*/
        /*1、动态初始化*/
        int[] arr = new int[10];
        /*2、循环赋值*/
        for (int i = 0; i < arr.length; i++) {
//            arr[i] = (int)(Math.random() * (99 - 10 + 1) + 10); [10-99]
            arr[i] = (int)(Math.random() * 90 + 10);
//            System.out.println(arr[i]);
        }
        /*3、求最大值*/
        int max = arr[0];
        for (int j = 1; j < arr.length; j++) {
            if(arr[j] > max) {
                max = arr[j];
            }
        }
        System.out.println("最大值为:" + max);
        /*4、求最小值*/
//        略;
        /*5、求总和*/
        int total = 0;
        for (int i = 0; i < arr.length; i++) {
            total += arr[i];
        }
        System.out.println("总和为" + total);
        /*6、平均值*/
        int avg = total / arr.length;
        System.out.println(avg);
    }
public static void main(String[] args) {
//    特征值;
        /*评委打分:掐头去尾,求平均值;*/
        int[] scoreArr = new int[] {5,4,8,9,0,1,2,7,3};
        int max = scoreArr[0], total = 0, min = scoreArr[0];
        int avg = 0;
        for (int i = 0; i < scoreArr.length; i++) {
            total += scoreArr[i];
            if(max < scoreArr[i]) {
                max = scoreArr[i];
            }
            if(min > scoreArr[i]) {
                min = scoreArr[i];
            }
        }
        avg = (total - max -min ) / (scoreArr.length - 2);
        System.out.println(avg);
    }

2、数组元素的赋值;

java 复制代码
public static void main(String[] args) {
//        数组元素的赋值;
        /*打印一个10行的, 杨辉三角*/
      /*1
        1   1
        1   2   1
        1   3   3   1
        1   4   6   4   1
        1   5   10  10  5   1
        1   6   15  20  15  6   1
        1   7   21  35  35  21  7   1
        1	8	28	56	70	56	28	8	1
        1	9	36	84	126	126	84	36	9	1	*/
        int[][] arr = new int[10][];
        for (int i = 0; i < arr.length; i++) {
            /*定义长度*/
            arr[i] = new int[i+1];
            /*首尾赋值为1*/
            arr[i][0] = 1;
            arr[i][arr[i].length - 1] = 1; //看图形相当于arr[i][i];
//            条件不满足的不会进来;
            for (int j = 1; j < arr[i].length - 1; j++) {
                arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
            }
        }
        /*for (int i = 2; i < arr.length; i++) {
            for (int j = 1; j < arr[i].length - 1; j++) {
                arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
            }
        }*/
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }

//        System.out.println();
    }

3、数组的复制和反转;

引用类型的问题,同JS相同;修改同一个地址后,多个引用同一地址会变动;
一旦初始化完成,数组的长度就确定了且!不可更改

java 复制代码
public static void main(String[] args) {
//        数组元素的复制;
        int[] arr1 = new int[]{1,2,3,4,5,6};
        int[] arr2 = new int[arr1.length];
        for (int i = 0; i < arr2.length; i++) {
            arr2[i] = arr1[i];
        }
        System.out.println("==================");

        /*数组反转*/
        int[] posArr = new int[] {1,2,3,4,5,6};
        int[] nagArr = new int[posArr.length];
        for (int i = 0; i < posArr.length; i++) {
            nagArr[posArr.length - 1 - i] = posArr[i];
        }
        for (int i = 0; i < nagArr.length; i++) {
            System.out.print(nagArr[i]);
        }
            System.out.println("=================");
        /*数组反转*/
//        arr[i] = arr[arr.length - 1 - i]
        for (int i = 0; i < posArr.length / 2; i++) {
            int temp = posArr[i];
            posArr[i] = posArr[posArr.length - 1 - i];
            posArr[posArr.length - 1 - i] = temp;
        }
        for (int i = 0; i < nagArr.length; i++) {
            System.out.print(posArr[i]);
        }
        System.out.println("=================");
        /*数组反转*/
        for (int i = 0,j=posArr.length - 1; i < j ; i++, j--) {
            int mid = posArr[i];
            posArr[i] = posArr[j];
            posArr[j] = mid;
        }
        for (int i = 0; i < nagArr.length; i++) {
            System.out.print(posArr[i]);
        }
    }

4、扩容和缩容;(扩展长度)

java 复制代码
public static void main(String[] args) {
        /*扩容并添加值10,20,30*/
        int[] arr = new int[] {1,2,3,4,5};
//        int[] newArr = new int[arr.length * 2];
        int[] newArr = new int[arr.length << 1];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        newArr[arr.length] = 10;
        newArr[arr.length+1] = 20;
        newArr[arr.length+2] = 30;
        arr = newArr;
        /*GC判断newArr无指针后会进行回收,*/
        System.out.println("===================");
        /*缩容,删除第n项*/
        int index = 4;
//        方式1、
        int[] oArr = new int[] {1,2,3,4,5,6,7};
        for (int i = index; i < oArr.length - 1; i++) {
            oArr[i] = oArr[i+1];
        }
        oArr[oArr.length-1] = 0;
        for (int i = 0; i < oArr.length; i++) {
            System.out.print(oArr[i] + "\t");
        }
        System.out.println("===================");
//        方式2、
        int[] ooArr = new int[] {1,2,3,4,5,6,7};
        int[] nArr = new int[ooArr.length - 1];
        for (int i = 0; i < index; i++) {
            nArr[i] = ooArr[i];
        }
        for (int i = index; i < ooArr.length - 1; i++) {
            nArr[i]= ooArr[i + 1];
        }
        ooArr = nArr;
        for (int i = 0; i < ooArr.length; i++) {
            System.out.print(ooArr[i] + "\t");
        }

    }

5.元素的查找(线性、二分)

java 复制代码
public static void main(String[] args) {
        /*线性查找*/
        int[] arr = new int[] {1,2,3,4,5,6,7,8,9,0};
        int target = 5,index = -1;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == target) {
                index = i;
                break;
            }
        }
        System.out.println("index: " + index);
        System.out.println("=================");
        /*二分查找*/
//        前提是一个有序数组;
        int[] arr2 = new int[] {1,2,3,4,5,6,7,8,34,44,45,56,67,78,89,90};
//        int target2 = 8;    //查找目标;
        int target2 = 99;    //查找目标;
        int head = 0, end = arr2.length - 1;    //首尾索引;
        int index2 = -1;
        while (head <= end) {
            /*计算中间值*/
            int mid = (head + end) / 2;
            if(target2 == arr2[mid]) {
                index2 = mid;
                break;
            } else if(target2 > arr2[mid]) {
                /*查找右边*/
                head = mid + 1;
            } else {
                /*查找左边*/
                end = mid - 1;
            }
        }

        System.out.println("index2: " + index2);
    }

6.数组排序

java 复制代码
public static void main(String[] args) {
        /*排序*/
        /**1、冒泡排序:
         *      相邻的比较,大的就往后移动;
         *      N轮;
         *      (每次冒个最大的泡泡)
         */
        int[] arr = new int[] {1,2,33,4,5,6,7,8,9,0};
        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 mid = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = mid;
                }
            }
        }
        System.out.print("冒泡排序:");
        for (int i = 0; i < arr.length ; i++) {
            System.out.print(arr[i] +"\t");
        }
        System.out.println();
        System.out.println("===================");
        /*快速排序*/
        /**
         *
         */
        System.out.print("快速排序:");
    }

关于部分术语

java 复制代码
1、时间复杂度:分析关键字的比较次数和记录的移动次数
:O(1)<log2n < n N nlog2n < n^2 < n^3 <2^n < n! < n^n;

2、空间复杂度:分析排序算法中需要多少辅助内存;
很多时候都是用 ""空间换时间。相对来说时间比较重要;

3、稳定性:排序后相等的值前后顺序是否可能会变化;
相关推荐
Coovally AI模型快速验证25 分钟前
MMYOLO:打破单一模式限制,多模态目标检测的革命性突破!
人工智能·算法·yolo·目标检测·机器学习·计算机视觉·目标跟踪
可为测控1 小时前
图像处理基础(4):高斯滤波器详解
人工智能·算法·计算机视觉
Milk夜雨1 小时前
头歌实训作业 算法设计与分析-贪心算法(第3关:活动安排问题)
算法·贪心算法
BoBoo文睡不醒2 小时前
动态规划(DP)(细致讲解+例题分析)
算法·动态规划
apz_end2 小时前
埃氏算法C++实现: 快速输出质数( 素数 )
开发语言·c++·算法·埃氏算法
仟濹3 小时前
【贪心算法】洛谷P1106 - 删数问题
c语言·c++·算法·贪心算法
苦 涩3 小时前
考研408笔记之数据结构(七)——排序
数据结构
CM莫问4 小时前
python实战(十五)——中文手写体数字图像CNN分类
人工智能·python·深度学习·算法·cnn·图像分类·手写体识别
sz66cm4 小时前
LeetCode刷题 -- 45.跳跃游戏 II
算法·leetcode
Amor风信子4 小时前
华为OD机试真题---战场索敌
java·开发语言·算法·华为od·华为