A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孟浩然 中级黑马   /  2012-6-30 09:24  /  1871 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目:根据上排给出的十个数,在其下排填出对应的十个数,要求下排每个数都是上排十个数在下排出现的次数
也是在csdn上看到的,上次做的时候愣是看不懂怎么回事,昨晚上在笔记本上又看见了,然后在本子上把排列的情况都画了画,找到了一点规律,大体思路是这样的:下排的数组初始化时的大小应该和上排大小一样,而且默认元素都是0,我就拿上排每个元素在下排数组里找它出现的个数,然后改变下排对应元素的值,依次循环,可以得出下排数组;代码:
  1. /*
  2. 根据上排给出的十个数,在其下排填出对应的十个数,要求下排每个数都是上排十个数在下排出现的次数
  3. */
  4. class GetNextArray
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 //System.out.println("Hello World!");
  9.                 int[] arr1={0,1,6,3,5,4,2,7,8,9};
  10.                 int[] arr2=new int[arr1.length];
  11.                 for(int y=0;y<arr1.length;y++)
  12.                 {
  13.                         for (int x=0;x<arr1.length ;x++ )
  14.                         {
  15.                                 int a=getCount(arr1[x],arr2);
  16.                                                
  17.                                 if(arr2[0]==0)
  18.                                         arr2[0]=a-1;
  19.                                 else
  20.                                         arr2[x]=a;                                               
  21.                         }
  22.                 }
  23.                 printArray(arr1);
  24.                 System.out.println();
  25.                 printArray(arr2);
  26.         }
  27.         //获得每个元素在数组中出现的次数
  28.         public static int getCount(int key,int[] arr)
  29.         {
  30.                 int count=0;
  31.                 for (int x=0;x<arr.length ;x++ )
  32.                 {
  33.                         if (key==arr[x])
  34.                                 count++;                       
  35.                 }
  36.                 return count;
  37.         }
  38.         //打印数组       
  39.         public static void printArray(int[] arr)
  40.         {
  41.                 for (int x=0;x<arr.length ;x++ )
  42.                 {
  43.                         if(x!=arr.length-1)
  44.                                 System.out.print(arr[x]+",");
  45.                         else
  46.                                 System.out.print(arr[x]);
  47.                 }
  48.         }
  49. }
复制代码
代码里的第一个for循环的判断条件,我找不到,我把每次排列都列了出来,然后找到了y<arr1.length,说不出原因,但是结果是正确的,如果有人知道,说一下哈;还有这个程序不一定要是十位数,但是只能在五位以上,{0,1,2,3,4}得不出结果,在上面的代码里看不出原因,但是如果把上面代码用while循环的话,我发现其实就是个无限循环,程序无法找到结果,试了很多次,都不行;原题给出的例子是0-9有序数组,我把它顺序打乱了也可以算出来。

点评

经典面试题,有兴趣的都可以试试  发表于 2012-6-30 16:28

评分

参与人数 1技术分 +2 收起 理由
刘蕴学 + 2

查看全部评分

3 个回复

倒序浏览
学习了,这块是我看视频 看得最头疼的部分!老捣了!
回复 使用道具 举报
duang
duang
duang...
世界很大,我想去看看。。。钱包那么小,我想去当老板!
深圳前海广深发(简称“广深发”)www.qhgsf.com
5月8号开业,7大活动
带上大家一起赚利息
大家都赚赚赚!
  【活动一】新用户首投,奖奖奖
  【活动二】邀请好友,赚取利息奖
  【活动三】活跃“粉丝”,奖奖奖
  【活动四】感恩客户再次充值,送送送
  【活动五】回款续投奖励
  【活动六】约标奖励
  【活动七】月标利率及奖励
前海广深发交流QQ群:86393392,前海广深发咨询热线:400-998-0755
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马