你先sort一下
然后判断后一个数不等于前一个数时.....
关键你先排一下序。排序后就什么都可以了
然后判断后一个数不等于前一个数时.....
关键你先排一下序。排序后就什么都可以了
解决方案 »
- 奇怪的题啊,怎么就是有错误呢?求解……!
- 有关Spring配置文件中property设置疑问
- -----如何向jTextpane中添加文本---
- Google + Java = ?
- 求jar的用法(将程序打包和清单文件 up者有分)
- 菜鸟问题:如何在java中实现读文件(一行一行地读)和写文件(一行一行地追加写)?请高手指点!在线等待!
- 请问jbuilder中,"Warning #:check sourcepath;..." 908 是什么含义
- 如何生成下拉菜单
- 是否能实现用鼠标双击来运行.class文件?
- Java Socket序列化对象的问题
- 初学java,请大家指教:我写了个图形界面的东西,比如button的标题为"确定",在命令行下编译并运行时,"确定"为什么是乱码呢?谢谢!
- 想跟大家讨论一下servlet的问题
<<
public int calculateDuplicateCount(int[] a) {
Set set = new HashSet();
for(int i=0; i<a.length; i++) {
set.add(new Integer(a[i));
}
return a.length - set.size();
}
>>
<<
public int calculateDuplicateCount(int[] a) {
Set set = new HashSet();
Set dupSet = new HashSet();
for(int i=0; i<a.length; i++) {
if(set.contain(new Integer(a[i])) {
dupSet.add(new Integer(a[i]);
} else {
set.add(new Integer(a[i]));
}
}
return dupSet.size();
}
>>
<<
public class TestA extends TestCase {
public TestA(String name) {super(name);} public void testCalculateDuplicateCount() {
int[] a = {1,0,0,2,5,1,1};
assertEquals(2, calculateDuplicateCount(a));
} public int calculateDuplicateCount(int[] a) {
Set set = new HashSet();
Set dupSet = new HashSet();
for(int i=0; i<a.length; i++) {
if(set.contains(new Integer(a[i]))) {
dupSet.add(new Integer(a[i]));
} else {
set.add(new Integer(a[i]));
}
}
return dupSet.size();
}
}
>>
恕俺才疏,如何修正可保证单元测试通过?
<<
public int calculateDuplicateCount(int[] a) {
Set set = new HashSet();
Set dupSet = new HashSet();
for(int i=0; i<a.length; i++) {
if(set.contains(new Integer(a[i]))) {
dupSet.add(new Integer(a[i]));
} else {
set.add(new Integer(a[i]));
}
}
return dupSet.size();
}>>
如果只有一个Set,那么只能取到有多少个重复的数字。
如果修正如下:
<<
public int calculateDuplicateCount(int[] a) {
int result = 0;
Set dupSet = new HashSet();
for(int i=0; i<a.length; i++) {
if(!dupSet.add(new Integer(a[i]))) {
result ++;
}
}
return result;
}
>>
这和俺在二楼贴出的做法就有异曲同工之效了。
但是楼主的需求中实际上数字可能重复多次的,比如有三个1,但是算重复只能算作一个。因此俺使用dupSet来标示发现重复的数字,之所以选择使用HashSet,也是因为重复多次也只算一次。
因此有点没有想明白你的修正方式。应该如何做?另TO Shrewdcat(丧邦&灵猫&潇):
2重循环遍历和一个中间变量,恐怕没有这么简单。你实现看看,恐怕逻辑会比较复杂的。:)
遍历数组,如果在list中没有的,就list.add,如果有就跳过
最后看list.count(?或者.length)应该很明白吧,如果重复率很高的话,应该效率最高的吧
招聘JSP网页编程人员(1-2名)
1-2年的网页编程经验
语言:JSP,java,html,javascript
请在简历中写明对以上语言的掌握程度以及学历.北京友联创新系统集成有限公司
联系方式:
010-62984859-8010王先生
[email protected]
<<
public int calculateDuplicateCount(int[] a) {
Map map = new HashMap();
for(int i=0; i<a.length; i++) {
Integer each = new Integer(a[i]);
if(map.containsKey(each)) {
map.put(each, Boolean.valueOf(true));
} else {
map.put(each, Boolean.valueOf(false));
}
}
int result = 0;
for(Iterator it=map.values().iterator();it.hasNext();) {
if(((Boolean)it.next()).booleanValue()) result++;
}
return result;
}>>
<<
public int calculateDuplicateCount(int[] a) {
Map counts = new HashMap();
for (int i = 0; i < a.length; i++) {
Integer ele = new Integer(a[i]);
Integer value = (Integer) counts.get(ele);
if (value != null) {
counts.put(ele, new Integer(value.intValue() + 1));
} else {
counts.put(ele, new Integer(1));
}
}
counts.values().removeAll(Arrays.asList(new Integer[]{new Integer(1)}));
return counts.values().size();
}
>>
int[] counters=new int[10];
for(int i=0;i<a.length;i++)
{
counters[a[i]]++;
}
int j=0;
for(int i=0;i<counters.length;i++)
{
if(counters[i]>=2)
{
j++;
}
}
return j;他说:new Integer(a[i])很耗时间的;
谢谢各位的帮助!!!