首页 > 其他分享 >Day03 数组

Day03 数组

时间:2024-07-02 15:56:40浏览次数:16  
标签:数组 Day03 ++ int length arr2 arr1

数组

定义

相同类型数据的有序集合

声明创建

  • 必须先声明数组,才能使用(动态初始化)
int[] nums;//定义  java
int nums2[];//定义  c/c++   
都可以用,首选第一个
  • 声明后要创建
nums = new int[10];(默认初始化,0或null)

  • 静态初始化: 创建+赋值
int a[] = {1,2,3,4,5};

四个基本特点

  • 长度是确定的,一旦被创建,大小不可变

  • 数组中元素为相同类型

  • 数组元素可以是任何数据类型,包括基本类型和引用类型

  • 数组变量是引用类型,数组可以看成是对象,每个元素相当于该对象的成员变量。

    数组对象本身在堆中

数组边界

下标的合法区间:[0,length-1]

如果越界就会报错:ArrayIndexOutOfBoundsException(数组下标越界异常)

小结

  • 数组是相同数据类型的有序集合
  • 数组也是对象,数组元素相当于对象的成员变量
  • 数组的长度是确定的,不可变的。如果越界,就会报错

数组使用

  • 普通的for循环
  • for-each循环
  • 数组作为方法的参数
  • 数组作为返回值

多维数组

多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。

int a[][] = new int[2][5];

Array类

  • toString 用于打印

  • sort 排序

  • fill 赋值

  • equals 比较是否相等

  • binarySearch 查找

    更多看jdk8帮助文档

冒泡排序

排序后续再新开随笔

稀疏数组

  • 当一个数组的大部分元素为0,或为同一值时,可以使用稀疏数组来保存该数组

  • 处理方法:

    • 记录数组一共有几行几列,有多少个不同值
    • 把不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
  • 下图:左边为原始数组,右边是稀疏数组

小练习:

/**
 * @version: java version 1.8
 * @Author: Mr Orange
 * @description:
 * @date: 2024-07-02 13:35
 */
public class Nums {
    public static void main(String[] args) {
        //创建新的数组
        int[][] arr1 = new int[11][11];
        arr1[0][0] = 1;
        arr1[3][2] = 2;
        arr1[6][3] = 1;
        arr1[7][4] = 2;
        System.out.println("===============================");
        System.out.println("原始数组");
        //打印数组
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[i].length; j++) {
                System.out.print(arr1[i][j] + "  ");
            }
            System.out.println();
        }
        System.out.println("===============================");
        System.out.println("稀疏数组:");
        int[][]xishu =  xiShu(arr1);
        System.out.println("还原数组");
        restore(xishu);



    }
    public static int[][] xiShu(int[][] arr1) {
        //计算有多少个不同数据
        int count = 0;
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[i].length; j++) {
                if (arr1[i][j] != 0) {
                    count++;
                }
            }
        }
        //创建稀疏数组
        int[][] arr2 = new int[count+1][3];
        //给第一行赋值
        arr2[0][0] = arr1.length;
        arr2[0][1] = arr1[0].length;
        arr2[0][2] = count;
        //将不同数据的行、列、值,记录到稀疏数组中
        int flag = 1;
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[i].length; j++) {
                if (arr1[i][j] != 0) {
                    arr2[flag][0] = i;
                    arr2[flag][1] = j;
                    arr2[flag][2] = arr1[i][j];
                    flag++;
                }
            }
        }
        //打印数组
        for (int i = 0; i < arr2.length; i++) {
            for (int j = 0; j < arr2[i].length; j++) {
                System.out.print(arr2[i][j] + "  ");
            }
            System.out.println();
        }
        System.out.println("===============================");
        return arr2;
    }
    public static int[][] restore(int[][] arr2) {
        //还原
        int[][] arr3 = new int[arr2[0][0]][arr2[0][1]];
        for (int i = 1; i < arr2.length; i++) {
            arr3[arr2[i][0]][arr2[i][1]]= arr2[i][2];
        }
        //打印数组
        for (int i = 0; i < arr3.length; i++) {
            for (int j = 0; j < arr3[i].length; j++) {
                System.out.print(arr3[i][j] + "  ");
            }
            System.out.println();
        }
        return arr3;
    }
}

标签:数组,Day03,++,int,length,arr2,arr1
From: https://www.cnblogs.com/shisi2001/p/18279991

相关文章

  • (nice!!!)LeetCode 3164. 优质数对的总数 II(数组、哈希表)
    3164.优质数对的总数II思路:先找出可以被k整除的nums[i].方法一:统计因子。1、找出数组nums1每个元素的因子,用哈希表来记录每个因子出现的次数。然后再遍历数组nums2进行累加即可。classSolution{public:constintN=1e6+10;longlongnumberOfPairs(vec......
  • TypeScript中,如何利用数组生成一个联合类型
    本文由ChatMoney团队出品在开发中我们常常会遇到这样一个问题,代码如下:constarr=["a","b","c","d","e","f","g","h","i","j","k","l&qu......
  • TypeScript中,如何利用数组生成一个联合类型
    本文由ChatMoney团队出品在开发中我们常常会遇到这样一个问题,代码如下:constarr=["a","b","c","d","e","f","g","h","i","j","k","l&qu......
  • 数组模拟队列
    829.模拟队列-AcWing题库#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineendl'\n'constintN=5e5+10;intq[N];inthh=0,tt=-1;//hh头tt尾signedmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);......
  • C#面:实现产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复
    对生成的数组排序,需要支持升序、降序两种顺序usingSystem;usingSystem.Collections.Generic;classProgram{staticvoidMain(string[]args){Randomrandom=newRandom();HashSet<int>set=newHashSet<int>();while(set.C......
  • 【算法探险】在排序数组中查找元素的第一个和最后一个位置
    【算法探险】在排序数组中查找元素的第一个和最后一个位置一、引言:算法界的寻宝图二、技术概述:双剑合璧,左右逢源定义与核心特性优势代码示例:初露锋芒三、技术细节:抽丝剥茧,揭秘算法奥秘原理解析难点剖析四、实战应用:数字海洋,定位精准应用场景案例展示五、优化与改进:精......
  • c指针详解(2)--- 指针与数组
    在大致了解了c语言中变量在内存中的分配、存活等方面后,我们再来看看数组在内存中又是如何呈现的。这里我们就只讨论静态数组,动态数组涉及到动态内存分配,这里就不详细展开了。那么什么是静态数组呢?要理解这个数据结构,我们可以将其切分为两个概念:静态与数组。数组:数组其实就是一......
  • 蓝桥杯python数组排序
    题目:资源限制内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s问题描述给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200输入格式第一行为一个整数n。第二行包含n个整数,为待排序的数,每个整数的绝对值小于1......
  • ts 数组使用方式
    概论代码测试//普通数组letuuy:Array<number>;uuy=[23,23423,23423423]letuud:[]//letuua:array;//报错,不能这样声明数组//从右往左是越子级内容letuuv:number[][]//二维数组uuv=[[23,23423,23423423],[23,23423,23423423],[23,23423,23423423]]letuuo:......
  • The this Pointer (this 指针) and An Array of Objects (对象数组)
    ThethisPointer[this指针]andAnArrayofObjects[对象数组]1.The`this`Pointer(`this`指针)2.AnArrayofObjects(对象数组)References1.ThethisPointer(this指针)classStock{private: doubletotal_val_; ...public: double......