大家一起来做题目--求独立数的个数

caofeng891102 2010-01-21 06:25:58
int []intVals={3,1,5,1,9,5,7,2,3,8,4};比如里面的3出现了两次就不是独立数,再比如里面的4出现了一次,所以是唯一的,叫它为独立数,要求求出数组里的独立数的个数,用java算法实现,谢谢~~~~
...全文
263 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
墨水鱼 2010-01-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ouyangyh 的回复:]
真的服了你们的,像做这种统计之类的,第一点就是要把数组排序,像你们如果不排序,效率将非常低
排好序后,直接按下标统计
[/Quote]
其实数据结构里处理分成有序数据处理、无序数据处理。有序数据处理比较常见,一般先排序后处理。无需数据处理里最常见的是用hash法,也有针对特定情况的无需排序即可处理的方案。

另外在数据量特别小的时候,一般不值得做排序。
notlogin 2010-01-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kk6521 的回复:]
没人同意我的????????!!!!!!!!!!
[/Quote]

看不懂 = =。 不会正则
cbajing 2010-01-22
  • 打赏
  • 举报
回复
格式好好的,发上去怎么变得这么难看呢!
cbajing 2010-01-22
  • 打赏
  • 举报
回复
随便写写,简单实现,不考虑其他
public class Dulishu {
private int count=0;//计数器,计算有多少个非独立数

public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}


/**
* 计算非独立数个数
* @param d
*/
public void findDulishu(int d[]){
for(int i = 0; i < d.length; i++){
for(int j = i+1; j < d.length; j++){
//判断是否是非独立数
if(d[i] == d[j]){
// System.out.println("相等的数是: " + d[j]);
count++;//是,计数器加1
break;//是,跳出此循环
}
}
}
}


public static void main(String[] args){
Dulishu dulishu = new Dulishu();

int []intVals={3,1,5,1,9,5,7,2,3,8,4};
int count;
dulishu.findDulishu(intVals);
// System.out.println("intVals length is : " + intVals.length);
count = intVals.length - dulishu.getCount();//计算有多少独立数
// System.out.println("dulishu count is : " + dulishu.getCount());
System.out.println("intVals 中独立数个数是: " + count);

}
}
架构师虎哥 2010-01-22
  • 打赏
  • 举报
回复
没人同意我的????????!!!!!!!!!!
psyuhen 2010-01-22
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 forrest23 的回复:]
Java code//最笨的循环publicvoid GetCount() {int[] intVals={3,1,5,1,9,5,7,2,3,8,4};for (int i=0,count=0; i< intVals.length; i++,count=0) {for (int j=0; j< intVals.length; j++) {if (intVals[i]-intVals[j]==0)
{
count++;
}
}if (count==1) {
System.out.println("独立数:"+intVals[i]);
}
}

}
[/Quote]

我觉得在第二个循环里面有时不需要循环a.lengh次,因为有重复就可以跳出这个循环开始外面的下一次的循环。
psyuhen 2010-01-22
  • 打赏
  • 举报
回复
哈哈。。新方法:

public static int fun(int []a){
List list = new LinkedList();
Set set = new TreeSet();
for(int i=0;i<a.length;i++){
int value = a[i];
String valString = String.valueOf(value);
if(!list.contains(valString)){
list.add(valString);
}else{
set.add(valString);
}
}
return list.size()-set.size();
}



不知道这样的效率如何。
我验正了一下,发现还是下面这种方法快点。

int flag = 0;
int count = 0;
for(int i=0;i<intVals.length;i++){
for(int j=0;j<intVals.length;j++){
if(intVals[i]==intVals[j]){
flag ++;
}
if(flag >=2){
break;
}
}
if(flag < 2){
count++;
}
flag = 0;
}
System.out.println(count);

使用的测试数据。

int []intVals={3,1,5,1,9,5,7,2,3,8,4,10,22,199,10,20,32,
32,34,56,19,22,100,29,14,3,5,7,122,0,90,34,29,
199,324,85,33,100,22,33,44,55,66,77,88,99,100
,122,23,21,31,41,51,66,77,100,1000,200,133,33,99};
Forrest23 2010-01-22
  • 打赏
  • 举报
回复

//最笨的循环
public void GetCount() {
int[] intVals={3,1,5,1,9,5,7,2,3,8,4};
for (int i = 0,count=0; i < intVals.length; i++,count=0) {
for (int j = 0; j < intVals.length; j++) {
if (intVals[i]-intVals[j]==0)
{
count++;
}
}
if (count==1) {
System.out.println("独立数:"+intVals[i]);
}
}

}

wuhaozhiyuan 2010-01-22
  • 打赏
  • 举报
回复
这是我的:

import java.util.HashMap;
import java.util.Map;

public class Test1 {
public static void main(String[] args) {

int[] temp = {1,2,3,4,2,3,1,34,4,3,42,345,3,6};
System.out.println(Test1.getOneS(temp));
}

public static int getOneS(int[] values){
int num = 0;
Map<String,Integer> map = new HashMap<String,Integer>();
for(int temp:values){
String srttemp = "" + temp;
map.put(srttemp, map.get(srttemp) == null?new Integer(1):map.get(srttemp) + 1);
}
for(String sKey:map.keySet()){
if(map.get(sKey).intValue() == 1) num++;
}
return num;
}
}
CManLH 2010-01-22
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 nihuajie05 的回复:]
Java codeint [] a={3,1,5,1,9,5,7,2,3,8,4};int [] b=newint [a.length];for(int index:a)
{
b[index]++;
}int index=0;do
{if(b[index]==1)
System.out.println("This is XXX number :"+index);
}while(++index<a.length);
[/Quote]

想法不错,不过没考虑周全
如果是这样呢? int [] a={100,1,5,1,9,5,7,2,3,8,4}

楼主在坛子里搜一下,会找到好答案的
iewxcep 2010-01-22
  • 打赏
  • 举报
回复
public static void main(String[] args) {
int []intVals={3,1,5,1,4,3,4,5,9};
Set set=new HashSet();
int length=intVals.length;
int temp=length;
int num=0;
int setLength=0;
for(int i=0;i<length;i++)
{
setLength=set.size();
set.add(intVals[i]);
if(set.size()==setLength)
{
num=temp-2;
temp=temp-2;
}
}
System.out.println(num);
}
nihuajie05 2010-01-22
  • 打赏
  • 举报
回复

int [] a={3,1,5,1,9,5,7,2,3,8,4};
int [] b=new int [a.length];
for(int index:a)
{
b[index]++;
}
int index=0;
do
{
if(b[index]==1)
System.out.println("This is XXX number :"+index);
}while(++index<a.length);
nihuajie05 2010-01-22
  • 打赏
  • 举报
回复

int [] a={3,1,5,1,9,5,7,2,3,8,4};
int [] b=new int [a.length];
for(int index:a)
{
b[index]++;
}
int index=0;
do
{
if(b[index]==1)
System.out.println("This is XXX number :"+index);
index++;
}while(index<a.length);
Leopard_911 2010-01-22
  • 打赏
  • 举报
回复
[code=Java ]
int[] intVals = {3, 1, 5, 1, 9, 5, 7, 2, 3, 8, 4};
int size = intVals.length;
List[] judge = new List[size];
int count = 0; //记录独立数的个数
for (int i = 0; i < intVals.length; i++) {
int index = intVals[i] % size;
if(judge[index] == null){
judge[index] = new ArrayList<Integer>();
judge[index].add(intVals[i]);
count++;
}
else{
int sameIndex = 0;
for (int j = 0; j < judge[index].size(); j++) {
if(intVals[i] == (Integer)(judge[index].get(j))){
count--;
sameIndex = 1;
break;
}
}
if(sameIndex == 0){
count++;
}
}
}
System.out.println("记录独立数的个数: " +count);
[/code]
nihuajie05 2010-01-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ouyangyh 的回复:]
真的服了你们的,像做这种统计之类的,第一点就是要把数组排序,像你们如果不排序,效率将非常低
排好序后,直接按下标统计
[/Quote]
去看3楼的代码
详情请垂询10086
psyuhen 2010-01-22
  • 打赏
  • 举报
回复

int []intVals={3,1,5,1,9,5,7,2,3,8,4};
int flag = 0;
int count = 0;
for(int i=0;i<intVals.length;i++){
for(int j=0;j<intVals.length;j++){
if(intVals[i]==intVals[j]){
flag ++;
}
if(flag >=2){
break;
}
}
if(flag < 2){
count++;
}
flag = 0;
}
System.out.println(count);


这感觉这样做没效率呀。
墨水鱼 2010-01-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kk6521 的回复:]
没人同意我的????????!!!!!!!!!!
[/Quote]
编译不通过,语法错误
cryinghawk 2010-01-21
  • 打赏
  • 举报
回复
学习
Inhibitory 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ouyangyh 的回复:]
真的服了你们的,像做这种统计之类的,第一点就是要把数组排序,像你们如果不排序,效率将非常低
排好序后,直接按下标统计
[/Quote]

这就是Java区处C++区的区别。
ouyangyh 2010-01-21
  • 打赏
  • 举报
回复
真的服了你们的,像做这种统计之类的,第一点就是要把数组排序,像你们如果不排序,效率将非常低
排好序后,直接按下标统计
加载更多回复(7)

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧