[英]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.