Java+AI<AI的使用与Java的基础学习-数组>
今天也是学到了数组阶段,首先我先回想了之前学到的c里的数组。
C语言数组数组本身是连续内存块,非对象,无内置方法。静态数组必须在编译时指定大小(C99变长数组VLA例外);int arr[10];和Java不同,Java动态创建,大小在运行时确定;int[] arr = new int[10];C语言用sizeof(arr)/sizeof(arr[0]),但仅在数组作用域内有效;传参后退化为指针,丢失长度信息,而Java直接通过arr.length(属性,非方法)获取,始终准确。C语言不做检查,越界访问不报错,导致未定义行为,Java严格检查,越界抛出(这个在学习的时候感觉尤为明显)
对比
C
int arr[5] = {1,2,3,4,5};
int len = sizeof(arr)/sizeof(arr[0]); // 5
int *p = arr;
p++; // 指向第二个元素
printf("%d", arr[5]); // 未定义行为,可能输出垃圾或崩溃
Java
int[] arr = {1,2,3,4,5};
int len = arr.length; // 5
// arr++; // 编译错误,无指针运算
System.out.println(arr[5]); // 抛出ArrayIndexOutOfBoundsException
Java在定义时为数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,元素4...};
简化格式:数据类型[] 数组名 = {元素1,元素2,元素3,元素4...};
Java在访问时基本和c一致都是数组名[索引];
在大量学习了Java的数组时我顺手做了很多练习
经过基础的练习我学会了数组的大部分知识,我接着做了几道比较难的题
/*给定一个整数数组 nums 和一个整数目标值 target, 请你在该数组中找出 和为目标值 target 的那两个 整数,并输出它们的数组索引。 提示:先不用考虑效率问题,两层循环即可完成 要求1:只要输出第一对满足要求的情况 要求2:输出所有满足要求的情况*/
//给你两个有序数组 arr1 和 arr2 //将两个数组中的数据合并到一个大数组中 //要求:合并之后的大数组也是有序的
给定一个递增的有序数组和一个目标值,在数组中找到目标值,打印其索引。
如果目标值不存在于数组中,打印应插入的位置
我的代码
我是通过线性查找的方式逐个去查找
ai教给我的
ai使用二分查找,比我的效率更高,在相同条件有ai的帮助那个效率高使用哪个,它的代码让我对题目有了新的理解。
