
## 一、数组基础前置要点1. 数组属于**引用类型**存放在堆空间栈存数组地址下标从**0开始**最大下标 数组.Length - 1越界报错索引超出界限。2. Length获取数组整体元素总个数只读属性不可修改。csharpint[] arr {1,2,3};Console.ReadKey();## 二、四大常用操作详解### 1、数组反转2种实现#### ① 原生内置方法Array.Reverse()- 特点**直接修改原数组元素顺序无返回值**底层封装交换逻辑开发首选。csharpint[] arr {10,20,30,40};Array.Reverse(arr); //原数组变为{40,30,20,10}#### ② 手动算法反转面试必考- 原理对称位置互换 arr[i] ↔ arr[arr.Length - i -1]- 循环边界i arr.Length / 2只循环前半段如果循环全部下标前后重复交换变回原数组。csharpint[] arr {1,2,3,4,5};int len arr.Length;for(int i 0; i len/2; i){int temp arr[i];arr[i] arr[len - i -1];arr[len - i -1] temp;}### 2、统计指定元素出现次数- 思路定义计数器count0遍历全数组元素和目标值相等则计数器自增。- 规则数组为空、无匹配元素最终结果为0**对比元素数据类型必须完全一致**。csharp/// summary统计次数/summarystatic int GetCount(int[] arr,int target){int count 0;foreach(int item in arr){if(item target) count;}return count;}### 3、随机生成数组 数组洗牌打乱Fisher-Yates洗牌算法#### 1随机填充数组- 关键**全局只实例化1个Random对象**不要循环内new Random()Random.Next(最大值)左闭右开取值范围[0,最大值)。csharpRandom rd new Random();int[] arr new int[5];for(int i0;iarr.Length;i){arr[i] rd.Next(100); //0~99随机数}#### 2Fisher-Yates原地打乱数组标准洗牌- 逻辑从后往前遍历当前下标元素和随机下标元素互换随机索引范围rd.Next(arr.Length)保证下标合法不越界。csharpRandom rd new Random();for(int i arr.Length-1; i0; i--){int randIndex rd.Next(i1);int temp arr[i];arr[i] arr[randIndex];arr[randIndex] temp;}### 4、数组查找补充高频考点1. Array.IndexOf(数组,目标)从头部查找找到返回下标找不到统一返回-12. Array.LastIndexOf(数组,目标)从尾部查找无匹配返回-1。csharpint[] arr {5,8,2,8};int idx Array.IndexOf(arr,8);//返回1## 三、高频易错坑点背诵重点1. **Random易错**短时间循环内多次new Random()系统根据时间戳生成种子随机序列完全重复解决方案Random定义在循环外部全局唯一实例。2. **反转边界易错**循环i arr.Length全量遍历前后互换两次数组变回原样必须限定i 长度/2。3. **Next左闭右开**Next(n)取不到n想要1~10取值写Next(1,11)。4. **索引越界**最大下标永远Length-1随机下标不能超过数组长度。5. **查找默认返回值**内置查找方法找不到元素一律返回-1不会报错。6. **字符串数组误区**string是不可变字符串不能通过下标直接修改单个字符。## 四、精简背诵口诀1. 反转两种法内置改原位手动循环半2. 计数从头扫相等计数器加一无值归零3. 随机只new一次Next左闭右开洗牌倒序随机换4. 查找无结果统一返回负一。