Java数组面试题-数组逆置(一)

1.给定整形数组,实现数组逆置

public int[] changeArray(int[] array) {
		int i = 0;//定义数组的第一个元素
		int j = array.length-1;//定义数组的最后一个元素
		int temp = 0;
		while (i <= j) {
			temp = array[i];
			array[i] = array[j];
			array[j] = temp;//交换数组的最后一个元素
			i++;
			j--;
		}
		return array;
	}
### 实现数组算法 在数组过程中,主要思路是交换首尾元素并逐步向中间靠拢直到完成整个数组的反转。以下是几种不同的方法来实现这功能。 #### 使用 `while` 循环与双指针法 这种方法利用两个指向数组两端的指针,在每次迭代中交换这两个位上的值,并使左指针右移位而右指针左移位,直至两者相遇或交错为止[^2]。 ```c++ void Inversion1(int a[], int sz) { int temp = 0; int* left = a; int* right = a + sz - 1; while (left < right) { temp = *left; *left = *right; *right = temp; left++; right--; } } ``` 此函数接收个整型数组及其大小作为参数,内部采用临时变量存储待交换的数据项以防止数据丢失。 #### 利用索引来遍历数组种常见的做法就是直接基于下标的访问来进行元素间的替换工作。这种方式不需要额外声明指针类型的变量,而是通过调整索引的方式达到相同的效果[^3]。 ```cpp #include <stdio.h> int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; // 定义数组 int i = 0; int j = sizeof(arr) / sizeof(arr[0]) - 1; while (i < j) { int temp = arr[i]; // 定义个临时变量temp arr[i] = arr[j]; arr[j] = temp; i++; j--; } for (int k = 0; k < 10; k++) { printf("%d\n", arr[k]); } return 0; } ``` 上述代码片段展示了完整的程序逻辑,不仅包含了核心的转过程,还包括了初始化阶段以及最终的结果展示部。 #### 应用指针简化操作 当涉及到更复杂的场景时,比如动态配内存或者处理多维结构体等形式下的数组时,则可以考虑引入更多高级特性如指针运算等手段进步优化性能表现[^4]。 ```c++ #define N 10 int main() { int a[N], t; for(t=0;t<N;t++){ scanf("%d",&a[t]); } int *start = &a[0], *end = &a[N-1]; while(start < end){ t = *start; *start++ = *end; *end-- = t; } for(t=0;t<N;t++){ printf("%d ",a[t]); } return 0; } ``` 这段源码实现了用户交互式的输入输出流程,允许从标准输入读取系列数值填充到指定长度的维整形数组当中去;接着调用了之前提到过的双指针技术完成了实际意义上的翻转动作;最后再次打印出经过变换后的序列供验证之用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-乾坤-

????????????????????????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值