黑马程序员技术交流社区

标题: 去除数组中的重复数字,不用“set,list,map”这些集合方法。大神bb求解!! [打印本页]

作者: 琳以沫    时间: 2014-7-17 17:47
标题: 去除数组中的重复数字,不用“set,list,map”这些集合方法。大神bb求解!!
//我的思路是:
//1)每次拿第aa[t],和后面的aa[t+1]个数比较。
//2)比较的同时如果后面的数有和aa[t]相等的,就把,后面的数往前赋值,并且数组的长度减1。
//3)gs表示的是数组的长度。
for(int t=0;t<gs;t++)
        {
               
         for(int f=t+1;f<gs;f++)
         {
       
                 if(oldshu[t]==oldshu[f])
                 {
                                oldshu[f]=oldshu[f+1];
                                 gs=gs-1;
                 }  
         }
         jl=jl+1;  
        }
       
作者: fantacyleo    时间: 2014-7-17 17:51
何苦每次去移动数组元素呢。直接新建一个数组,把原数组的元素往新数组里复制就好了,复制的时候就按你的思路判断是否重复:aa[t]和aa[t+1]比较,如果不相等就输出到新数组
作者: blue_sky    时间: 2014-7-17 21:31
数组一旦确定,长度不变。数据前移后,后面的值为0。长度减不了。
作者: 琳以沫    时间: 2014-7-19 19:01
blue_sky 发表于 2014-7-17 21:31
数组一旦确定,长度不变。数据前移后,后面的值为0。长度减不了。

它是改变不了长度,,但是我可以控制他的打印长度(个数)。。。
作者: 琳以沫    时间: 2014-7-19 19:03
fantacyleo 发表于 2014-7-17 17:51
何苦每次去移动数组元素呢。直接新建一个数组,把原数组的元素往新数组里复制就好了,复制的时候就按你的思 ...

我想把这想法实现一下。。。能帮帮不???
作者: fantacyleo    时间: 2014-7-19 20:30
琳以沫 发表于 2014-7-19 19:03
我想把这想法实现一下。。。能帮帮不???

  1. public void delDuplicates(int[] a) {
  2.     int cursor  = 0; // 遍历数组时所用的下标
  3.     int left = a.length; // 数组中还剩多少元素

  4.     while (cursor < left - 1) {
  5.             if (a[cursor] == a[cursor + 1]) {
  6.                 // 将a[cursor + 1] 开始的数组元素相左移一位
  7.                 for (int i = cursor + 1; i < left; i++)
  8.                     a[i - 1] = a[i];
  9.                 left--; // 数组长度减1
  10.                 continue;
  11.            }
  12.            cursor++;
  13.     }
  14. }
复制代码



作者: 琳以沫    时间: 2014-7-22 09:15
fantacyleo 发表于 2014-7-19 20:30

在定义函数时static这个关键词必须有。。 你还是把你的程序运行下把,,没有解决我要问的问题。。。例如{1,1,1,2,5,6,8,2,9} 这个数组,当你用Cursor控制输出时结果{1,2,5,6,8,2}。当你用left控制输出时结果{1,2,5,6,8,2,9}。。谢谢你的,代码。
作者: fantacyleo    时间: 2014-7-22 10:00
琳以沫 发表于 2014-7-22 09:15
在定义函数时static这个关键词必须有。。 你还是把你的程序运行下把,,没有解决我要问的问题。。。例如{ ...

{1,1,1,2,5,6,8,2,9}的运行结果不符合预期,不是我代码的问题,是你思路的漏洞,你的思路只在数组有序的情况下才成立,本来就应付不了{1,1,1,2,5,6,8,2,9}的情况。就好比你拿一个未排序的数组去二分查找,查找失败,不能怪二分查找错了吧?
作者: 琳以沫    时间: 2014-7-22 10:47
fantacyleo 发表于 2014-7-22 10:00
{1,1,1,2,5,6,8,2,9}的运行结果不符合预期,不是我代码的问题,是你思路的漏洞,你的思路只在数组有序的 ...

那你的意思,,就是说,弥补我这种思路漏洞的方法是先给数组排序。。。??是不是。。。
作者: fantacyleo    时间: 2014-7-22 10:49
琳以沫 发表于 2014-7-22 10:47
那你的意思,,就是说,弥补我这种思路漏洞的方法是先给数组排序。。。??是不是。。。 ...

必须的。。。
作者: 琳以沫    时间: 2014-7-22 10:54
fantacyleo 发表于 2014-7-22 10:49
必须的。。。

好吧,,授教了。。。谢谢。。了。。
作者: 阳光的嘉主角    时间: 2014-7-22 12:34
干嘛这样做呢?
作者: 草鱼狂飙    时间: 2014-7-22 13:15
  1. public class help3 {
  2.         public static void main(String[] args) {
  3.                 Object obj[] = new Object[1000];
  4.                 obj[0] = "gyugyugyug";
  5.                 obj[1] = "gyugyugyug";
  6.                 obj[2] = 333;
  7.                 obj[3] = 233;
  8.                 obj[4] = true;
  9.                 obj[5] = false;
  10.                 for (int i = 0; i < obj.length; i++) {

  11.                         for (int j = i + 1; j < obj.length; j++) {
  12.                                 if (obj[i] == obj[j]) {
  13.                                         for (int j2 = j; j2 < obj.length-1; j2++) {
  14.                                                 obj[j] = obj[j + 1];
  15.                                         }
  16.                                 }
  17.                         }
  18.                 }
  19.                 for (int i = 0; i < obj.length; i++) {
  20.                         System.out.print(obj[i]+"   ");
  21.                 }
  22.                

  23.         }
  24. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2