wendy_stt 2016-12-10 13:52 采纳率: 100%
浏览 1202
已采纳

关于时间复杂度的问题,两个程序为什么复杂度不同,各位好心人求回答

第一个程序
public class Main{
public char getString(String s){
int num=0;
for(int i=0;i<s.length();i++){
for(int j=0;j<s.length();j++){
if(s.charAt(i)==s.charAt(j)){
num++;
}

}
if(num==1){
return s.charAt(i);
}else{
num=0;
}
}
return 0;
}
public static void main(String[] args) throws IOException{
Main main=new Main();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String s=null;
while((s=br.readLine())!=null){
System.out.println(main.getString(s));
}

}

}
第二个程序
import java.util.Scanner;

public class Main {

public static void main(String[] args){
    Scanner in = new Scanner(System.in);
    int array=in.nextInt();//得到数据组数
    for(int i=0;i<array;i++){//取出每一个字符串判断
        String str=in.next();
        char[] ch=str.toCharArray();
        System.out.println(getFirstChar(ch));  
    }     
}
//统计字符数组中只出现一次字符的数组
public static char getFirstChar(char[] ch){
    char goal;
    for(int i=0;i<ch.length;i++){
        int k=0;
        goal=ch[i];
        for(int j=0;j<ch.length;j++){
            if(goal==ch[j]){
                k++;
            }
            if(k>1){
                break;
            }
        }
        if(k==1){
            return goal;
        }

    }
    return '0'; 
}

}
这两个算法在MyEclipse中都可以执行,但是第一个在牛客网上却执行不了,说时间复杂度太大,我想问一下这两个都是两个for循环加判断,咋么第一个复杂度大于第二个呢,各位帮帮忙!

  • 写回答

3条回答 默认 最新

  • devmiao 2016-12-10 16:07
    关注

    第二个有break,所以速度快

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已采纳回答 5月17日

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码