黑马程序员技术交流社区
标题:
求高手指教:一道简单的编程题
[打印本页]
作者:
王小丑
时间:
2013-2-22 20:12
标题:
求高手指教:一道简单的编程题
今日看到一道题,题目要求大概如下:有序数组中绝对值不同的数的个数指的是,一个已经排好序的整数数组中,绝对值不相同的数字的个数。
例如:[-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个
我不知道这种思想是不是太麻烦,可是我确实想不出来其它的方法,求高手指教!
作者:
许鑫星
时间:
2013-2-22 20:28
{:soso_e103:}既然只是要绝对值不同的个数,直接把数列的值全部取正,然后相同的数只保留一个,再取数组长度就行了吧
作者:
夏振博
时间:
2013-2-22 20:54
本帖最后由 夏振博 于 2013-2-22 21:24 编辑
楼上数组长度的思路写的代码 这这么个意思吗,突然发现这代码有错误,当有重复元素时 结果不准,你们想吧
public class Test {
public static void main(String[] args) {
int[] arr = { -5, -3, -2, 0, 2, 3, 4, 8 ,6,-6};
int num = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 1; j < arr.length; j++) {
if (arr[i] == arr[j])
continue;
if (Math.abs(arr[i]) == Math.abs(arr[j])) {
num++;
}
}
}
System.out.println(arr.length - num);
}
}
复制代码
作者:
黄鸿达
时间:
2013-2-22 22:36
import java.util.;*
public class a {
public static void main(String[] args) {
int num=0;
int[] arr=new int[]{-6,-5,-3,-2,-1,0,1,2,3,6};
for(int x=0;x<arr.length;x++){
if(arr[x]<0){
arr[x]=~arr[x]+1;
}
}
Map m=new HashMap();
for(int x=0;x<arr.length;x++){
if(m.containsKey(arr[x])){
num++;
}
else{
m.put(arr[x], 1);
}
}
System.out.print(num);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2