字符串型数组
正向存储 :即位数与对应下标成正比
例:["5","2","0"]
对应下标:0,1,2
解释:初始下标从视觉上的顺序的第一位开始
整数型数组
反向存储 :即位数与对应下标成反比
例:[5,2,0]
对应下标:2,1,0
解释:按照数学逻辑顺序,即初始下标从个位数开始
总结就是碰到int数组,第一时间就要联想到下标是从右往左的,[......3,2,1,0],string则是数组反之
一、核心规则(记死!)
只要是「比较数组中相邻两个元素」(比如数字各位的相邻位判断),循环条件必须写:j < len - 1(绝对不能写 j <= len - 1)
len代表数组长度,len - 1代表下标的最后一位,例如[1,2,3],它的长度就是3,下标最后一位则是2,也可以理解成下标最大值
底层逻辑(为什么是 < 不是 <=?)
- 数组有效长度为
len时,相邻元素对的数量 =len - 1对(比如 3 位数只有 2 对相邻位); - 循环要遍历所有相邻对,只需执行
len - 1次; - 用
< len - 1能保证循环次数刚好等于相邻对数量,避免数组越界 / 访问无效位。
肌肉记忆口诀
相邻比,少一对,len 减 1,用小于;只要写 <=,必越界;要安全,就写 <。
二、简单示例(覆盖核心场景)
示例 1:两位数(len=2)------ 验证降序数(95)
public class Demo {
public static void main(String[] args) {
int num = 95;
// 拆解为反向int数组:[5,9],len=2
int[] arr = {5,9};
int len = 2;
boolean isDesc = true;
// 核心条件:j < len - 1 → j < 1
for (int j = 0; j < len - 1; j++) {
// 反向数组:判断左位>右位 → arr[j+1] > arr[j]
if (arr[j+1] <= arr[j]) {
isDesc = false;
break;
}
}
System.out.println(isDesc); // 输出true(95是降序数)
}
}
- 循环次数:j 只取 0(1 次),刚好比较 arr [1] 和 arr [0](1 对相邻位);
- 若写
j <= len-1(j<=1),j 会取 0、1,j=1 时会访问 arr [2](越界)。