专题课:综合案例4

数组元素反转

1.实现方法一

问题一:如何将数组的元素进行反转?

我们发现,如果将数组0号索引的元素与最后一位索引的元素互换,1号索引与倒2索引元素互换......以此类推,这样就可以实现数组元素的反转

.

但是,虽然知道了反转的方法,但是我们该怎么将所有的元素都进行反转呢?一个一个手打,实在不现实

.

我们不妨先将每对要反转的数列出来,寻找它们的规律

提示:(0号索引对应的是最后一位索引,但该索引是arr.length-1,数组长度是5,但索引最高是4)

.

在上图中,我们惊讶地发现了一个规律

即:反转的两个元素,不就是arr[i]与arr[arr.length-1-i]么

由此,我们解决了元素互换的问题

.

问题二:我们发现,元素互换经历了多次,因此,我们必须使用循环,但是,要循环几次呢?

图中,11->55,22->44,33不动,5个元素,循环了2次,而6个元素,循环了3次。

可见,我们循环的次数应该是长度除以2,即arr.length/2

.

所有问题都解决了,我们只需再定义一个三方变量,便可进行数组元素反转了

2.实现方法二:

设想,如果我们能有两个指针,一个对着0号索引,一个对着末位索引,当指针指向两个元素时,元素互换位置,接着,指针移动,继续让元素反转。

思路与之前一致,还是0和末位换,1和倒2换

1.定义两个变量,模拟两个指针

2.交换,让指针指向的元素进行交 换,这里我们不管那么多,先写出交换的表达式

当指针指向的两个数反转了以后,指针需要往中间移动移动,那我们该如何把指针指向的0变为1,5变为4呢?

很简单,让start做加加,end做减减即可

重点:如图



当指针移到到2和3,将元素反转后,指针继续移动,

此时start移动到了3,end移动到了2,我们发现,刚换完的33和44又被换了回去,如果继续让指针移动,那之前反转的所有元素都会被重新换回!

.

因此,我们要思考,什么情况下,我们才要让指针去交换。

回顾之前的流程,我们发现,当start指的索引小于end指的索引时,这时的交换就是正确的元素反转,而当start指向3,end指向2时,又把我们之前反转的元素给换回来了,这时就是错误的,由此得出结论:

.

只有当开始指针小于结束指针时,我们才可以做交换

接下来我们将刚才的思路进行整合,元素交换不止一次,说明肯定要用循环,回顾循环的表达式

与我们刚才写的思路进行对比,我们发现,初始化语句不就是我们定义的两个指针吗

判断条件是什么呢?只要是开始指针小于结束指针,就要移动,循环

循环体语句,不就是我们写的那些元素交换的表达式吗,虽然写死了,但我们可以寻找出它们的规律

这三段表达式,只有里面的索引不同,索引0->1->2 ;5->4->3的变化就是start和end的变化 得出通式

条件控制语句,就是start++,end--,因为每一次交换完,都要让指针移动。

现在所有疑问都已解决,切回idea进行实操吧!

posted @ 2024-10-22 23:21  直実  阅读(4)  评论(0编辑  收藏  举报