苍井空老师手把手带你学算法姿势 - 七大最常用的编程技巧

[复制链接]
yhc8325 发表于 2023-9-6 20:52:26|来自:北京 | 显示全部楼层 |阅读模式
点击蓝字“视学算法”关注我哟

加个“星标”,每日好文必达!
阿广 · 一个会讲段子的科学探索者









  • 1、巧用数组下标


  • 2、两重循环的简化


  • 3、棋盘类搜索技巧


  • 4、代码一致性处理技巧


  • 5、数组链表组合巧用


  • 6、用空间换时间技术


  • 7、用函数表结构代替分支技术




1、巧用数组下标






比如做一个存储汉字数字的数组,可以:
  1. a=[“零”,“一”,“二”,“三”]
复制代码
这样当需要取出“二”的时候,只需要:
  1. a[2];
复制代码
再比如,定义一个学生有两个属性:
  1. name=0;
  2. age=1;
复制代码
那么数组a存储学生的信息可以这样提取:
  1. a[name]和a[age]
复制代码

2、两重循环的简化


row=i(从1到M)
col=j(从1到N)




i从1到M*N
row = i/M
col = i%N
其中i/M表示i除以M的整数部分,i%N表示i除以N的余数。




对于棋盘/迷宫/图像/二维空间,往往都需要针对于某个点进行四个方向或者8个方向的搜索。


如果向上搜索
则...
如果向下搜索
则...
如果向左搜索
则...
如果向右搜索
则...


a=[(0,1),(0,-1),(-1,0),(1,0)]
i从0到4-1
新坐标=当前坐标+a








tail=(tail+1)%N
这样就把数组下标全部都统一了,这就叫做代码的一致性处理。






例如阿拉伯数字转换成汉字数字时,有一个需要注意的地方,那就是需要使用“万”“亿”这样的单位,但也不全是,如果不超过1w的数字,就没有单位。
所以这样定义:
  1. A=[“”,“万”,“亿”,“万亿”]
复制代码
这样,每个位置就用数组往上加单位即可,小于1w的数字加的单位就是“”(空的),这就是一致性处理,根本不需要再判断数字是否大于1w的。












有些时候在一些循环中,我们需要反复进行一些计算得到一系列的数,再去使用,这样的计算量非常的大!


我们可以分为两步进行:
1、将计算完成并把结果存储到一个数组中
2、在循环中如果用到这些结果,再去查询即可






















原结构:
  1. 如果条件1:
  2. 则动作1;
  3. 如果条件2:
  4. 则动作2;
  5. 如果条件3:
  6. 则动作3;
复制代码

函数(i)=动作i
i从1到end循环
如果 条件==条件(i)
则动作=动作(i)





全部回复4 显示全部楼层
fanfan480 发表于 2023-9-6 20:52:58|来自:北京 | 显示全部楼层
这么好的文章竟然不火
moi7889 发表于 2023-9-6 20:53:20|来自:北京 | 显示全部楼层
第7. 用函数表结构代替分支技术,不是很明白,可以举个例子说明一下吗
66i66 发表于 2023-9-6 20:54:06|来自:北京 | 显示全部楼层
简化双重循环那个写错了吧?
为爱 发表于 2023-9-6 20:54:29|来自:北京 | 显示全部楼层
数组那个有问题吧 a[name] ?

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则