一道程序题的反思——一些为了减少内存的开销
来源:互联网 发布:mac如何桌面图标 编辑:程序博客网 时间:2024/05/22 14:13
已知含有N个元素的一个数组,数组中各元素的范围是1~N-1,找出重复的那个值。
(就是有N-1个数都填充到N个位置,这N-1个
数至少出现一次,就是说,肯定有哪个数出现了两次,把这个数找出来。
这道题,在去年冬天的澡堂里,同学和我讨论过,就是建一个一样大的数组,将原来的数组遍历一遍,相应的位置
置1,当再次置1时,返现已经是1时,这就是那个数。
但是我一般一定会用int a[N]。
看到某位大神用bit来标识是否已存在,顿时感觉差距好大。
以下是代码:
我稍微做了一些修改:
#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <windows.h>#define tyust 0int produce_value(int a[],int N);int main(){int a[50];int i,same_num,site,p_value;same_num=-1;site=-1;for (i=0;i<50;i++){a[i]=i+1;}while(!((same_num>0)&&(site>-1)&&(same_num!=(site+1)))){srand((unsigned)time(NULL)); a[site=(rand()%50)]=(same_num=(rand()%50)+1);}for (i=0;i<50;i++){printf("%d ",a[i]);if (((i+1)%10)==0){printf("\n");}}printf("same_num=%d,site=%d\n",same_num,site);p_value=produce_value(a,50);printf("the produce value is %d\n",p_value);}int produce_value(int a[],int N){int n=N;int *array=a;int value=0; int a_num;int * p;int i;assert((n>0)&&(array!=NULL));a_num=(n/32)+1;assert(a_num>0);p=(int*)malloc(sizeof(int)*a_num);address=p;for (i=0;i<a_num;i++){p[i]=0;}for (i=0;i<n;i++){if (((p[(a[i]/32)])&(1<<(32-(a[i]%32))))==0){p[(a[i]/32)]|=(1<<(32-(a[i]%32)));}else{value=a[i];free(p);return value;}}return -1;}看结果
本题用到了。malloc就是动态开了一片堆。这次没有忘记使用free()。
使用了,assert()进行实参的合法性检验。
使用随机函数来产生位置和数字。
- 一道程序题的反思——一些为了减少内存的开销
- ADO防止内存泄露和减少内存开销的方法
- javascript性能提升——减少遍历集合的开销
- ArrayList——内存开销,时间上的开销
- 减少GC开销的技巧
- 减少GC开销的措施
- 减少java垃圾回收的开销方法
- Java 减少GC开销的几个措施
- mysql 减少group by 的开销
- C++对象加法重载时如何最大限度的减少内存开销
- 一道ACM题目的反思
- 一道面试题的反思
- 减少程序内存占用的方法
- oracle 每日一题-分析程序的内存开销(sga,pga,uga)
- HQL或SQL使用?带来的好处:减少SQL解析时间、降低内存开销、防止SQL注入
- 关于一道Special Judge输出的题的反思
- 一道顺序表的实验题的反思
- 一道笔试题,引发我的基础问题的反思
- 海量经典Java教程、学习资料和源码
- Server 2008 R2 IIS7 ASP无法连接MDB的解决办法
- ARM汇编中伪指令的介绍
- 10年的程序员总结
- java 操作的一些外部命令
- 一道程序题的反思——一些为了减少内存的开销
- 71道经典Android面试题和答案
- Android发送彩信
- dup2和pipe
- 软件版本的研究(MAJOR.MINOR.PATCH),从apr得到的信息
- Android之BroadcastReceiver
- windows7 uac初探三(最终编程篇-集成vc,vb和c#获取win7管理员权限)
- VB.NET 根据IP地址返回IP所在地的方法
- CRectTracker(橡皮筋)类的使用