抽象化地理解方法和技巧

文章讨论了一个在数组中移动指定索引值到末尾的高效方法,并对比了两种不同策略。作者通过自己的经历,反思了在复杂场景(如堆排序)中如何未能应用相同思路,指出深入理解并抽象化知识的重要性,以实现编程中的举一反三。
摘要由CSDN通过智能技术生成

提一个需求:

在一个数组中,将指定索引的值取出,放到数组的最后,且除了此索引,其他索引值的左右相对位置不变

这个问题非常简单,一看就出现思路了吧。

方法一:将指定的值存起来,然后后面依次覆盖前面,最后把temp赋给最后的位置。

方法二:从左到右一对对交换到最后。

显然方法一效率更高

像这种知识点太简单了,简单到潜意识直接处理了,连自己都没意识到。

但是如此简单的技巧,放入一个更加繁杂的环境中,还能意识到吗?

我学习韩顺平老师的教学视频时,写的是堆排序的一个方法,当他的代码写到以下位置时,我一度以为他写错了,只是把子节点的值赋给了父节点,却忘了把父节点的值换到子节点的位置:

直到他写到最后,我按他的代码认真推了一遍。发现他的做法不仅是正确的,而且还是更高效的,就相当于我刚才做那道数组题时用的方法一。而如下我自己写的代码,却相当于明显效率更低的方法二:

无论是数组那道简单题,还是这种有点复杂的场景,在这一点上,本质上完全是同一个问题,为什么前者我就能够自然而然地想到,而后者只是换了个形式就不行了?

或许一方面是因为我对于堆排序过程的理解不够熟练,不够深。但另一方面,是因为我并没有将方法一的知识抽象地认识,彻底地明白,只是浮于表面,受限于特定的载体。

这件事给我的提醒是:当我们学习一个技巧或方法时,要将它的原理抽象地理解,深入地理解,这样才能轻易将它匹配在各种不同的形式上,而不受限于特定的某个形式,这样才能够举一反三,如果像我那样同一个东西换个地方就想不出来了,那就事倍功半了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值