簡體   English   中英

時間復雜度 Java

[英]time complexity Java

考慮到給定的文本,該程序計算一個句子中的最大單詞數。一個文本可以有多個句子。 我必須找到最多單詞的句子

我有以下代碼我需要為此優化時間復雜度它不應超過 5 秒

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


class Solution {
    public int solution(String S) {
        // write your code in Java SE 8

        List<Integer> wca=new ArrayList<Integer>();

        int wc,i;
        String[] sent=S.split("\\.+");

        while(sent.length!=0){

            for(i=0;i<sent.length;i++){
               wc=sent[i].split("\\s+").length; 
               wca.add(wc);
            }

        }

        Collections.sort(wca);

        return(wca.get(wca.size()-1));


    }
}

您不需要對列表進行排序來簡單地找到它的最大值。 事實上,您根本不需要列表。 只需在進行時存儲最長的句子。

public int findLongestSentence(String paragraph) {
    String[] sentences = paragraph.split("\\.|\\!|\\?");
    int maxSentenceLength = 0;

    for(String sentence : sentences) {
        String[] words = sentence.split("\\s");
        maxSentenceLength = Math.max(words.length, maxSentenceLength);
    }

    return maxSentenceLength;
}

這可以通過不使用split()方法來提高效率,但這不會影響漸近時間復雜度。

PS 信息變量名很重要,加上良好的代碼格式,使您的代碼更易於閱讀。

該程序計算句子中的最大單詞數

假設你有這樣的文字:

Lorem ipsum dolor sat amet、consectetur adipisici elit、sed eiusmod tempor incidunt ut Labore et dolore magna aliqua。 Ut enim ad minim veniam, quis nostrud exercitation ullamco Laboris nisi ut aliquid ex ea commodi consequat。 Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 例外 sint obcaecat cupiditat non proident, sunt in culpa qui offcia deserunt mollit anim id est labum.

按點 (.) 分割

arr[0]= Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua

arr[1]= Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat

arr[2]= Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur

arr[3]= Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

單詞的數量與空格的數量有關,因此計算空格會更容易。

整數最大值 = 0; // 保存最大空間計數 int index = 0; // 這保存了最大空間計數的索引

遍歷數組

   int spaces = arr[i].length - arr[i].replace(" ","").length;
    if(spaces>max){
         max = spaces;
         index = i;
    }

在該循環結束時,您將獲得最大數量的單詞和該句子數組的索引。

據我所知,你想解析一個輸入文本,這樣你就可以得到每個句子的字數並找到最高的句子。

首先,你只返回最高的字數,沒有識別句子本身。

其次(正如其他人已經指出的那樣)排序可以替換為僅保留最長的句子,並在找到更長的句子時替換它。 那確實會將它帶到 O(n)。

第三是句子不能只以句號結尾的問題。

  String longest;
for (String s : sentences){
 if(s.split(" ").length>longest.split(" ").length))
{
longest = s
}
}

return longest;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM