为什么时间复杂度高?

时间:2019-05-18 16:52:13

标签: java time-complexity

这是来自hackerearth的问题:

Sherlock和Watson正在玩交换游戏。沃森给Sherlock一个字符串S,他在该字符串上执行了K个交换。您需要帮助Sherlock查找原始字符串。 以这种方式对字符串进行一次交换:

假设索引为1,则将第i个字母从末尾插入第i个和第(i + 1)个字母之间。 例如,我们有“比赛”。交换一次后,它将更改为“ ctosnet”。

查看此图片: click to view image

可以通过并通过所有测试用例的代码:

Scanner sc=new Scanner(System.in);
int k=sc.nextInt();
String s=sc.next();
int n=s.length();
String str[]=new String[1000];
StringBuilder sb1=new StringBuilder(s);
int i=0;
int x=0;
//str[x++]=sb1.toString();
while(true){
    StringBuilder sb=new StringBuilder();
    i=0;
    while(i<=n-1){
        sb.append(sb1.charAt(i));
        i+=2;
    }
    if(n%2!=0)
    i=i-3;
    else
    i=i-1;
    while(i>0){
        sb.append(sb1.charAt(i));
        i-=2;
    }
    sb1=sb;
    //System.out.println(x);
    x++;
    str[x]=sb1.toString();
    if(sb1.toString().equals(s))
    break;
}
System.out.println(str[k%x]);

我的代码在一些输入中显示了TLE:

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    int k=Integer.parseInt(br.readLine());
    String s=br.readLine();
    int n=s.length();
    StringBuilder sb1=new StringBuilder(s);
    int i;
    while(k-->0){
        StringBuilder sb=new StringBuilder();
        i=0;
        while(i<=n-1)
        {
            sb.append(sb1.charAt(i));
            i+=2;
        }
        if(n%2!=0)
        i=i-3;
        else
        i=i-1;
        while(i>0)
        {
            sb.append(sb1.charAt(i));
            i-=2;
        }
        sb1=sb;
    }
    System.out.println(sb1.toString());

我的代码在何时何地具有较高的时间复杂性?因为我在程序中有k次最少的循环次数,而另一个则有k次以上的循环次数。 我在哪里错过了使用BufferedReader而不是Scanner类的复杂性?

0 个答案:

没有答案