java数组练习题
时间: 2025-04-09 09:04:51 浏览: 21
<think>好的,我现在需要处理用户关于Java数组练习题的需求。用户希望得到示例、代码、题目和解析,所以我得先整理相关的资源。首先,看看用户提供的引用内容,引用3提到了数组逆序、插入、杨辉三角、顺序查找、二分查找、数组交集和寻找缺失数字等经典题目。引用4则是一个动态数组练习题,关于合并两个有序数组。用户可能对这类题目感兴趣,需要结合这些内容来生成问题。
接下来,我需要确保回答的结构清晰,符合用户的要求,包括示例代码和解析。可能还需要补充一些常见的数组练习题,比如数组去重、旋转数组、子数组和等,这样内容会更全面。同时,要注意每个题目都要有示例代码和解析,帮助用户理解。
还要检查代码的正确性,比如数组逆序可以通过双指针交换元素,杨辉三角需要正确计算每个位置的数值。合并有序数组的题目需要注意从后向前合并以避免覆盖元素,这点在引用4中提到的问题里很重要,需要详细说明。
另外,用户提到需要生成相关问题,可能需要包括每个练习题的扩展问题,比如时间复杂度的分析、不同解法的比较等。不过根据用户最后的示例,可能只需要列出相关问题,不需要详细展开,所以得在最后添加一个相关问题部分,比如关于优化、应用场景等。
需要确保所有数学公式使用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$。虽然当前问题可能涉及数学较少,但如果有比如在查找最大数时计算时间复杂度,可能需要用到。
最后,引用用户提供的站内引用,特别是引用3和4,在回答中适当的位置添加引用标识,例如在提到数组逆序或合并数组时标注[^3][^4]。同时,确保使用中文回答,代码部分语法正确,符合Java规范。
总结步骤:
1. 整理用户提供的引用中的数组练习题。
2. 补充其他常见数组题目,确保多样性。
3. 每个题目给出问题描述、示例代码和解析。
4. 检查代码正确性和格式。
5. 添加相关问题部分。
6. 正确引用站内资料。</think>### Java数组经典练习题与解析
---
#### 1. 数组逆序
**题目**:将数组元素顺序反转。例如,输入$[1,2,3,4,5]$,输出$[5,4,3,2,1]$。
**示例代码**:
```java
public static void reverseArray(int[] arr) {
int left = 0, right = arr.length - 1;
while (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
```
**解析**:通过双指针从两端向中间遍历,交换元素位置,时间复杂度为$O(n)$[^3]。
---
#### 2. 合并两个有序数组
**题目**:将有序数组`nums2`合并到`nums1`中,确保`nums1`仍有序。假设`nums1`有足够空间(例如初始长度为$m+n$)。
**示例代码**:
```java
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i = m - 1, j = n - 1, k = m + n - 1;
while (j >= 0) {
if (i >= 0 && nums1[i] > nums2[j]) {
nums1[k--] = nums1[i--];
} else {
nums1[k--] = nums2[j--];
}
}
}
```
**解析**:从后向前填充,避免覆盖`nums1`原有元素,时间复杂度$O(m+n)$。
---
#### 3. 杨辉三角生成
**题目**:生成前$n$行的杨辉三角。例如,$n=5$时输出:
```
[1]
[1,1]
[1,2,1]
[1,3,3,1]
[1,4,6,4,1]
```
**示例代码**:
```java
public List<List<Integer>> generatePascalTriangle(int n) {
List<List<Integer>> result = new ArrayList<>();
for (int i = 0; i < n; i++) {
List<Integer> row = new ArrayList<>();
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
row.add(1);
} else {
row.add(result.get(i-1).get(j-1) + result.get(i-1).get(j));
}
}
result.add(row);
}
return result;
}
```
**解析**:每行首尾为$1$,中间元素为上一行相邻两数之和[^3]。
---
#### 4. 寻找缺失的数字
**题目**:在$0$到$n$的数组中查找缺失的一个数。例如,输入$[3,0,1]$,输出$2$。
**示例代码**:
```java
public int missingNumber(int[] nums) {
int sum = 0, n = nums.length;
for (int num : nums) sum += num;
return n * (n + 1) / 2 - sum;
}
```
**解析**:利用高斯公式计算理论总和,减去实际总和即为缺失值,时间复杂度$O(n)$。
---
#### 5. 数组去重(原地)
**题目**:原地删除有序数组中的重复项,返回新长度。例如,输入$[1,1,2]$,输出长度$2$,数组变为$[1,2]$。
**示例代码**:
```java
public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
int k = 0;
for (int i = 1; i < nums.length; i++) {
if (nums[i] != nums[k]) {
nums[++k] = nums[i];
}
}
return k + 1;
}
```
**解析**:双指针法,快指针遍历,慢指针标记非重复位置,时间复杂度$O(n)$。
---
阅读全文
相关推荐














