请教各位大哥一个算法问题 如果排序后可以得到,但是是O(nlogn)的关注 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 设循环,将所有数每出现一次统计一次,若count(i)>o.5总数,则正如你所求。 a[10]={2, 2 ,2 ,2 ,3 ,5, 2, 3, 4, 2 }设temp[a.length]先把各个不相同的数放到temp里面然后循环比较,统计每个数出现的次数 循环一次,设标记flag(是否有主元素)初值false,记录每个元素出现的次数(count[i]++),记录的时候判断,如果当前元素出现次数已经>0.5*a.length()则循环结束,有主元素,将flag置true。否则如果循环完毕flag仍为false,无主元素。需要程序代码吗?自己应该可以写出来吧,不难。 当然是O(n)了,只是将n元数组循环一次啊 String a[]={"2", "2" ,"2" ,"2" ,"3" ,"5", "2", "3", "4", "2"}; Vector indexV = new Vector(); Vector element = new Vector(); for(int i=0;i<a.length;i++){ if(!indexV.contains(a[i])){ indexV.add(a[i]); element.add("0"); }else{ int j = indexV.indexOf(a[i]); int t = Integer.parseInt((String)element.get(j))+1; element.set(j,String.valueOf(t)); if(t>=0.5*a.length){ flag=true; System.out.println("element :"+a[i]+" is the main element"); } } 为了方便,我把数组变成了String型的 Vector是复杂变量,indexV.contains(a[i])、indexV.add(a[i]);可能都会去遍历,那就不是一次的问题。而是n2 String a[]={"2", "2" ,"2" ,"2" ,"3" ,"5", "2", "3", "4", "2"}; Vector indexV = new Vector(); Vector element = new Vector(); for(int i=0;i<a.length;i++){ if(!indexV.contains(a[i])) { indexV.add(a[i]); element.add("0"); }else { int j = indexV.indexOf(a[i]); int t = Integer.parseInt((String)element.get(j))+1; element.set(j,String.valueOf(t)); if(t>=0.5*a.length){ flag=true; System.out.println("element :"+a[i]+" is the main element"); } } 为什么排序后得到是O(nlogn)的 可以先用O(n)排完序 再做其他操作 使之还是O(n)吗 基数排序是0(rn+d),看似0(n),但是似乎不适合你的这种数值排序。 exitzhang(exit) 你提供的也不能算是O(n)吧,(!indexV.contains(a[i])本身就是个O(n)的,再放如FOR循环肯定是O(n2)了。我整理出的思路是先确定出现次数,然后寻找出现次数的最大值,用2次FOR循环,关键在于确定出现次数时很难限制为O(n)。 zjb030320134(环岛路)你的具体问题是什么啊,看起来你把你的具体问题抽象为现在的问题恐怕是很难解决的,不如把具体问题贴出来看大家有什么好办法。 zjb030320134(环岛路) ( ) 信誉:100 2003-12-20 20:46:00 得分:0 为什么排序后得到是O(nlogn)的 可以先用O(n)排完序 再做其他操作 使之还是O(n)吗如果你能用O(n)排序,我可以提供O(n)的查找主元算法,既然已经排序过了,可以再用一个FOR循环查找每个元素出现的次数,for (int i=1;i<arg.length;i++){ if a[i]=a[i-1] then 设定一下计数器并比较是否>=arg.length/2}这样加上你的排序是2 O(n),其实也就是O(n) 如何导入类包 JTable刷新问题 java查询数据库无法连接到系统表 servlet 跟 jsp 有几个方法获得参数啊? 回家过年了,祝大家天天有个好心情.我的源代码和大家共享!!!! 关于Pettern的问题 关于image图片的读出问题,请大虾指教! applet不能在浏览器中正常显示,高手请帮忙。 散分第四问:什么是接口?在JAVA API中有很多接口,为什么把这些定义为接口呢?在自已开发的程序中什么 (java程序运行报错,如下图)请问该如何解决? 使用java2图形设计(卷2 Swing)的样例,内部窗体无法显示 如何按某个角度在Grapnics上画文字???100分求解!!!
设temp[a.length]
先把各个不相同的数放到temp里面
然后循环比较,统计每个数出现的次数
Vector indexV = new Vector();
Vector element = new Vector();
for(int i=0;i<a.length;i++){
if(!indexV.contains(a[i])){
indexV.add(a[i]);
element.add("0");
}else{
int j = indexV.indexOf(a[i]);
int t = Integer.parseInt((String)element.get(j))+1;
element.set(j,String.valueOf(t));
if(t>=0.5*a.length){
flag=true;
System.out.println("element :"+a[i]+" is the main element");
}
}
String a[]={"2", "2" ,"2" ,"2" ,"3" ,"5", "2", "3", "4", "2"};
Vector indexV = new Vector();
Vector element = new Vector();
for(int i=0;i<a.length;i++){
if(!indexV.contains(a[i]))
{
indexV.add(a[i]);
element.add("0");
}else
{
int j = indexV.indexOf(a[i]);
int t = Integer.parseInt((String)element.get(j))+1;
element.set(j,String.valueOf(t));
if(t>=0.5*a.length){
flag=true;
System.out.println("element :"+a[i]+" is the main element");
}
}
可以先用O(n)排完序 再做其他操作 使之还是O(n)吗
我整理出的思路是先确定出现次数,然后寻找出现次数的最大值,用2次FOR循环,
关键在于确定出现次数时很难限制为O(n)。
恐怕是很难解决的,不如把具体问题贴出来看大家有什么好办法。
为什么排序后得到是O(nlogn)的
可以先用O(n)排完序 再做其他操作 使之还是O(n)吗如果你能用O(n)排序,我可以提供O(n)的查找主元算法,既然已经排序过了,
可以再用一个FOR循环查找每个元素出现的次数,
for (int i=1;i<arg.length;i++)
{
if a[i]=a[i-1] then 设定一下计数器并比较是否>=arg.length/2
}
这样加上你的排序是2 O(n),其实也就是O(n)