yirufeng
3436字约11分钟
2024-05-12
Object[][] array;
而用容器的话则需要这样定义:ArrayList<ArrayList > array
a[0]
就是偏移为 0 的位置,也就是首地址,a[k]
就表示偏移 k 个 type_size 的位置,所以计算 a[k]
的内存地址只需要用这个公式:但是,如果数组从 1 开始计数,那我们计算数组元素 a[k]
的内存地址就会变为:对比两个公式,我们不难发现,从 1 开始编号,每次随机访问数组元素都多了一次减法运算,对于 CPU 来说,就是多了一次减法指令。数组用一块连续的内存空间,来存储相同类型的一组数据,最大的特点就是支持随机访问,但插入、删除操作也因此变得比较低效,平均情况时间复杂度为 O(n)。在平时的业务开发中,我们可以直接使用编程语言提供的容器类,但是,如果是特别底层的开发,直接使用数组可能会更合适。
console.log("123")
如
A=1,2,3
B=A,B,C,D,
就要输出 1A2B3C1D2A3B...
这个很简单的,维护两个下标变量 ai,bi,自增时取模就行了,如
ai = (ai+1)%A.length
要求输出重复时循环跳出
一开始想到最小公倍数去了,面试官提示从下标考虑,当 ai 与 bi 相等且为 0 的时候跳出 就行了
如果数组自己内部有重复,求出重复的部分
如 A=1,2,3,1,2,3,1,2,3
就求出 1,2,3
所有人都认识 TA,但是 TA 不认识任何其他人
a [i] [j] = 1, i 认识 j
a [i] [j] = 0, i 不认识 j
a [i] [i] 置空
给定 n*n 的二维数组,有多少个名人?具体都是谁?
我的思路就是大力出奇迹,遍历美滋滋,结果当场去世……
实际上有技巧的,i 认识 j,则 i 不是名人,i 不认识 j,则 j 不是名人,以此可以进行推 理
选了第二道,但是不建议真的排序后再输出,最后用的递归,但是写的有点 bug😂😂,面 试官说主要还是考察思路和逻辑