专题课:综合案例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时,又把我们之前反转的元素给换回来了,这时就是错误的,由此得出结论:
.