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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王小丑 中级黑马   /  2013-2-22 20:12  /  1566 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今日看到一道题,题目要求大概如下:有序数组中绝对值不同的数的个数指的是,一个已经排好序的整数数组中,绝对值不相同的数字的个数。
例如:[-5,-3,-1,0,3,6].
请返回给定有序数组中绝对值不同的数的个数。
其实这道题就编程思想来说本身不是太难,可是从两边往中间找,有点类似于数据结构中的某种排序方法,不过这是寻找。
我的思路是应该分三步走,
1.随便从一边开始,然后比较两端的绝对值,记下小的一端,从大的一端往里找。
2.如果碰到了比小的一端还小的数据,则记下它,从以前的小的一端开始往里找。
3.一直这样下去。
如:-5,-3,-2,0,2,3,4
假如从左边开始:
-5 4  小的:4
4 -3  小的:-3
-3 3  小的:-3  (3重复一次)
-3 2  小的:2
2 -2  小的:2 (2重复一次)
0  完毕
于是绝对值不重复的有:3个
我不知道这种思想是不是太麻烦,可是我确实想不出来其它的方法,求高手指教!

评分

参与人数 1黑马币 +9 收起 理由
李培根 + 9 赞一个!

查看全部评分

3 个回复

倒序浏览
{:soso_e103:}既然只是要绝对值不同的个数,直接把数列的值全部取正,然后相同的数只保留一个,再取数组长度就行了吧
回复 使用道具 举报
本帖最后由 夏振博 于 2013-2-22 21:24 编辑

楼上数组长度的思路写的代码 这这么个意思吗,突然发现这代码有错误,当有重复元素时 结果不准,你们想吧
  1. public class Test {

  2.         public static void main(String[] args) {
  3.                 int[] arr = { -5, -3, -2, 0, 2, 3, 4, 8 ,6,-6};
  4.                 int num = 0;
  5.                 for (int i = 0; i < arr.length; i++) {
  6.                         for (int j = 1; j < arr.length; j++) {
  7.                                 if (arr[i] == arr[j])
  8.                                         continue;
  9.                                 if (Math.abs(arr[i]) == Math.abs(arr[j])) {
  10.                                         num++;
  11.                                 }
  12.                         }
  13.                 }
  14.                 System.out.println(arr.length - num);
  15.         }
  16. }
复制代码
回复 使用道具 举报

  1. import java.util.;*
  2. public class a {

  3.         public static void main(String[] args) {
  4.                 int num=0;
  5.                
  6.                 int[] arr=new int[]{-6,-5,-3,-2,-1,0,1,2,3,6};
  7.                 for(int x=0;x<arr.length;x++){
  8.                         if(arr[x]<0){
  9.                                 arr[x]=~arr[x]+1;
  10.                         }
  11.                 }
  12.                 Map m=new HashMap();
  13.                 for(int x=0;x<arr.length;x++){
  14.                         if(m.containsKey(arr[x])){
  15.                                 num++;
  16.                         }
  17.                         else{
  18.                                 m.put(arr[x], 1);
  19.                         }
  20.                        
  21.                 }
  22.                 System.out.print(num);

  23.         }
  24. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马