簡體   English   中英

比較Java中的字符串數組中的元素

[英]Compare elements in an array of string in Java

我必須編寫一個方法,該方法將比較字符串數組中的元素並返回最大元素的索引。 這將使用分而治之的方法遞歸完成。 我有一個主意,我只是想看看我的主意是否正確,或者是否應該以其他方式完成。

我正打算從左側看陣列mid -1,然后看mid ,再看看mid +1右。 我有一個變量,它將跟蹤最大的索引,然后在那之后對左側和右側進行遞歸調用。

聽起來像是解決此問題的好方法嗎?

這是我到目前為止的內容:


public int longest()
{
    longest(0, a.length-1);
    return longestIndex;
}

private int longest( int left, int right)
{
    int longestIndex;
    int mid;

    if(left > right)
    {
        longestIndex = -1;
    }
    else if(left == right)
    {
        longestIndex = 0;
    }

    else
    {
        longestIndex = 0;

        mid = (left + right) / 2;
        longest(left, mid - 1);
        if (a[mid].compareTo(a[longestIndex]) > 0)
        {
            longestIndex = mid;
        }
        longest(mid + 1, right);            
    }            
    return longestIndex;
}

另外,由於方法應該返回一個int,我如何將longestIndex n從private方法傳遞給public方法,以便在調用longest時將其顯示在我的測試程序中?

必須是遞歸的嗎? 為此使用遞歸聽起來像是以下情況:

金錘

無論如何,您的遞歸看起來都是完全錯誤的,因為不僅您沒有跟蹤實際的索引,而且您的基本情況和遞歸調用也沒有任何意義。


如果我被迫使用遞歸,我會做類似的事情:

int longest(array):
    return longest_helper(0, 0, array)

int longest_helper(max_index, curr_idx, array):
    # base case: reached the end of array
    if curr_idx == array.length:
        return max_index

    if array[curr_idx].length > array[max_index].length:
        max_index = curr_idx

    # recursive call
    return longest_helper(max_index, curr_idx + 1, array)

然后我將繼續上課,並告訴教授給學生一些問題,在下一次遞歸實際上有幫助的地方。


由於看起來好像數組沒有排序,所以最簡單(最快)的方法就是遍歷整個過程(偽代碼):

max_index  = 0
max_length = array[0].length

for index in 1 .. array.length:
    if array[index].length > max_length:
        max_length = array[index].length
        max_index  = index

return max_index

這是您遞歸進行兩天后的第四個問題。 您最好貼上作業標簽,但最好花時間了解遞歸的工作原理。

我的建議是拿一些彩色光盤(單套的撲克籌碼或撲克牌效果很好),手動制定針對河內塔的遞歸解決方案,然后再回來查看您一直在問的單個問題。

您極有可能自己回答所有問題。 您還將能夠接受答案,從而在面對更棘手的問題時增加了將來獲得答復的機會。

暫無
暫無

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

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