统计数组中元素出现的次数——Java小程序
来源:互联网 发布:配眼镜 知乎 编辑:程序博客网 时间:2024/06/03 12:45
这段小代码,是在阅读了这篇博文后,作为练习写出来的,原文中,作者做了很详细的分析,在此根据自己的理解整理出了这篇博客。
原题是,给定一个int数组,找出数组中出现次数为奇数的数字。最终决定建立一个以数组元素为索引的数组,数组中的元素的值即为对应的数字出现的次数。由于数字出现的次数仅有奇偶之分,因此可以只用0和1以示区别。
以上所说的解法,最大的问题在于所创建的索引数组的大小该如何确定,如果已知待处理的数组中的最大数字,那么以此作为长度即可;如果不知道,那么要么设置一个比较大的数字(如Integer.MAX_VALUE),要么根据先设置一个初值,然后根据需要对索引素组进行扩容,为了节约存储空间,我采用第二种方法。
关于数组的操作,我觉得有两个方法很重要:
- 数组的复制
数组的复制,当然可以通过for循环来完成,但是这样效率太低;也可以通过数组对象本身的clone()方法来实现,但是这样是不能指定复制的内容的。
利用System.arraycopy(),可以灵活、高效地完成数组指定内容的复制 ,在Java中复制数组时,应优先考虑这种方法。 - 数组长度的调整
在Java中,数组一经建立,其长度是不能改变的。利用Arrays.copyOf(),可以得到一个新的数组,数组长度通过参数指定,原数组中的内容会保留,但是会根据新数组的长度对内容进行删减或者以0填充。
究其本质,原数组并没有改变,只是根据指定的长度创建了一个新的数组,然后将原数组中的内容复制过去,最后返回新的数组。
以下就是最终的代码
import java.util.Arrays;public class OddTimes { static int [] numbers; private int maxNum = 10; private int increment = 10; public OddTimes() { numbers = new int [maxNum]; } public OddTimes(int [] data) { int length = data.length; if (length == 0) { numbers = new int [maxNum]; } else { numbers = new int [length]; System.arraycopy(data,0,numbers,0,length); } } public static void main(String [] args) { int [] data = {1,1,2,3,5,3,6,8,0,7,2,3,8,3,4,4,4,5,5,5,5,11,33} ; OddTimes ot = new OddTimes(data); ot.fillIndex(); } public void fillIndex() { int [] index = new int [maxNum]; int mask = 0x1; for (int element : numbers) { if (element >= index.length) { int temp = element/increment+1; index = Arrays.copyOf(index,temp*increment); } index[element] = index[element] ^ mask; } System.out.println("The numbers below appeared odd times:"); for (int i=0; i<index.length; i++) { if (index[i] != 0) { System.out.print(i + "\t"); } } } }
代码中,利用按位异或(^)1的方式来实现在0和1之间的转变。原文中,作者还做了更多的分析,有兴趣的朋友不妨看看。
如果处于节约空间的考虑,可以将index数组由int数组,换成boolean数组,通过元素值为true或false来区别奇偶。当然,如果要统计具体的次数,那么用boolean就不太合适了,但是可以考虑byte、short等。
0 0
- 统计数组中元素出现的次数——Java小程序
- java 统计数组中各元素出现的次数
- 统计数组中各元素出现次数
- 统计数组中各数字(元素)出现的次数
- 统计一个无序数组中出现次数最多的元素
- 统计一个无序数组中出现次数最多的元素
- 统计数组中出现次数最多的元素并输出
- 在有序数组中,统计某一元素出现的次数
- 统计`数组`元素出现的次数
- Java实现——求整数数组中出现次数超过数组长度一半的元素
- c++在数组中查找元素并返回位置下标,统计某元素出现次数程序
- 数组元素出现次数统计
- java小算法—统计句子中每个单词出现的次数
- Java小程序:字符串中,统计每个字符出现的次数
- 去除数组中重复项,并统计重复出现次数最多的元素及重复次数
- java中判断数组中元素出现的次数
- 统计数组中数字出现的次数
- 统计一维数组中元素出现次数
- java算法之字符串全排列 。如此精辟
- FreeRTOS 特性简介
- JDK中的动态代理
- MyEclipse常用快捷键
- Android Studio系列教程一--下载与安装
- 统计数组中元素出现的次数——Java小程序
- C++宽字符串转字符串
- 实现的效果:EditText提示文本字体大小和输入文本字体大小不同
- Java中的Hashtable实现方法
- Android UI 之 SeekBar
- Android 实现能够暂停的录音功能
- Ogre切换摄像头
- Spring实例学习
- OC笔记-学习self时候2个target然后修改名字出现linker command failed with exit code 1 (use -v to see invocation)