2017-04-15 13 views
0

私は倍の文字列の面で私に与えられている時間を追加する必要が面接の準備の質問をやっています。私は2つのループ、1つは時間を解析し、もう1つは秒と分を分けます。私が信じている2つのネストされたループは時間の複雑さをO(n^2)にします。私のルームメイトは、これはひどいコードである私に言うと、O(n)の時間で解くことができるが、私はどのように把握することはできません。どんな助けもありがとう。前もって感謝します。以下はこの問題の私のコードです。時間ネストされたwhileループの複雑さ?

import java.io.*; 
import java.util.*; 

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

String x = "12:32 34:01 15:23 9:27 55:22 25:56"; 

String[] time = new String[6]; 
int[] mins = new int[6]; 
int[] secs = new int[6]; 
int hourTotal = 0; 
int minTotal = 0; 
int secTotal = 0; 

Scanner scan = new Scanner(x); 
scan.useDelimiter(" "); 

int i = 0; 
while(scan.hasNext() == true){ 

    time[i] = scan.next(); 
    Scanner scanz = new Scanner(time[i]); 
    scanz.useDelimiter(":"); 

    int diff = 0; 
    while(scanz.hasNext() == true){ 
    mins[i] = scanz.nextInt(); 
    secs[i] = scanz.nextInt(); 

    minTotal = minTotal + mins[i]; 
    secTotal = secTotal + secs[i]; 
    } 
    while(secTotal >= 60){ 
    if(secTotal >= 60){ 
     secTotal = secTotal - 60; 
     minTotal++; 
    } 
    } 
    while(minTotal >= 60){ 
    if(minTotal >= 60){ 
     minTotal = minTotal - 60; 
     hourTotal++; 
    } 
    } 
} 
i++; 

System.out.print(hourTotal + ":" + minTotal + ":" + secTotal); 
    } 
} 

答えて

0

私はここsplit方法を利用するでしょう。以下のコードは、私が信じるO(n)時に実行されます。

class Time { 
    public static void main(String[] args) { 
    String x = "12:32 34:01 15:23 9:27 55:22 25:56"; 

    String[] time = x.split(" "); 
    int hourTotal = 0; 
    int minuteTotal = 0; 
    int secondTotal = 0; 

    String[] timeBreakdown; 
    for (int i = 0; i < time.length ; i++) { 
     timeBreakdown = time[i].split(":"); 
     minuteTotal = minuteTotal + Integer.parseInt(timeBreakdown[0]); 
     secondTotal = secondTotal + Integer.parseInt(timeBreakdown[1]); 

     if (secondTotal >= 60) { 
     minuteTotal++; 
     secondTotal = secondTotal - 60; 
     } 
     if (minuteTotal >= 60) { 
     hourTotal++; 
     minuteTotal = minuteTotal - 60; 
     } 
    } 

    System.out.println(hourTotal + ":" + minuteTotal + ":" + secondTotal); 
    } 
} 
0
public static void main(String[] args) { 
    String x = "12:32 34:01 15:23 9:27 55:22 25:56"; 
    String[] minuteSecondPairs = x.split(" "); 
    int totalMinute = Arrays.stream(minuteSecondPairs) 
          .mapToInt(pair -> Integer.parseInt(pair.split(":")[0])) 
          .sum(); 
    int totalSecond = Arrays.stream(minuteSecondPairs) 
          .mapToInt(pair -> Integer.parseInt(pair.split(":")[1])) 
          .sum(); 
    int remainingSecond = totalSecond % 60; 
    totalMinute += (totalSecond - remainingSecond)/60; 
    System.out.println("Total hours: " + Math.floor(totalMinute/60) + " | Total minute: " + (totalMinute % 60) + " | Total second: " + remainingSecond); 
} 

これは(N)Oで

を実行します
関連する問題