好用的算法技巧1. 巧用数组下标

2019-06-1010:19:32数据结构与算法Comments2,517 views字数 564阅读模式

1. 巧用数组下标文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13540.html

数组的下标是一个隐含的很有用的数组,特别是在统计一些数字,或者判断一些整型数是否出现过的时候。例如,给你一串字母,让你判断这些字母出现的次数时,我们就可以把这些字母作为下标,在遍历的时候,如果字母a遍历到,则arr[a]就可以加1了,即 arr[a]++;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13540.html

通过这种巧用下标的方法,我们不需要逐个字母去判断。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13540.html

我再举个例子:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13540.html

问题:给你n个无序的int整型数组arr,并且这些整数的取值范围都在0-20之间,要你在 O(n) 的时间复杂度中把这 n 个数按照从小到大的顺序打印出来。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13540.html

对于这道题,如果你是先把这 n 个数先排序,再打印,是不可能O(n)的时间打印出来的。但是数值范围在 0-20。我们就可以巧用数组下标了。把对应的数值作为数组下标,如果这个数出现过,则对应的数组加1。 代码如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13540.html

public void f(int arr[]) {

       int[] temp = new int[21];
       for (int i = 0; i < arr.length; i++) {
           temp[arr[i]]++;
       }
       //顺序打印
       for (int i = 0; i < 21; i++) {
           for (int j = 0; j < temp[i]; j++) {
               System.out.println(i);
           }
       }
   }

利用数组下标的应用还有很多,大家以后在遇到某些题的时候可以考虑是否可以巧用数组下标来优化。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13540.html

作者:帅地
来源:知乎文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13540.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/13540.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/suanfa/13540.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定