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