在Java中比较字符串数组中的元素
我必须编写一个方法来比较字符串数组中的元素并返回最大元素的索引。它将使用分而治之的方法递归地完成。我有一个想法,我只是想看看我的想法是否正确,或者是否应该以不同的方式来实现 我计划从左侧看阵列,从在Java中比较字符串数组中的元素,java,arrays,string,Java,Arrays,String,我必须编写一个方法来比较字符串数组中的元素并返回最大元素的索引。它将使用分而治之的方法递归地完成。我有一个想法,我只是想看看我的想法是否正确,或者是否应该以不同的方式来实现 我计划从左侧看阵列,从mid-1开始,然后看mid,再从右侧看mid+1。我有一个变量,它将跟踪最大的索引,然后对左侧和右侧进行递归调用 这听起来是解决这个问题的好方法吗 这就是我到目前为止所做的: 另外,由于这些方法应该返回int,我如何将私有方法中的longestIndex传递给公共方法,以便在调用longest时它会
mid
-1开始,然后看mid
,再从右侧看mid
+1。我有一个变量,它将跟踪最大的索引,然后对左侧和右侧进行递归调用
这听起来是解决这个问题的好方法吗
这就是我到目前为止所做的:
另外,由于这些方法应该返回int,我如何将私有方法中的longestIndex传递给公共方法,以便在调用longest时它会显示在我的测试程序中?它必须是递归的吗?对此使用递归听起来像是以下情况: 不管怎么说,您的递归看起来完全错误,因为不仅您没有跟踪实际的索引,而且您的基本情况和递归调用也没有任何意义
如果我被迫使用递归,我会这样做:
int最长(数组):
返回最长的辅助对象(0,0,数组)
int longest\u helper(最大索引、当前idx、数组):
#基本情况:已到达数组末尾
如果curr_idx==array.length:
返回最大索引
如果数组[curr\u idx]。长度>数组[max\u index]。长度:
最大索引=当前idx
#递归调用
返回最长的辅助对象(最大索引,当前idx+1,数组)
然后我会继续下课,告诉教授给学生们下一次递归真正有用的问题
因为看起来数组没有排序,所以最简单(也是最快)的方法就是遍历整个过程(伪代码): 它必须是递归的吗?对此使用递归听起来像是以下情况: 不管怎么说,您的递归看起来完全错误,因为不仅您没有跟踪实际的索引,而且您的基本情况和递归调用也没有任何意义
如果我被迫使用递归,我会这样做:
int最长(数组):
返回最长的辅助对象(0,0,数组)
int longest\u helper(最大索引、当前idx、数组):
#基本情况:已到达数组末尾
如果curr_idx==array.length:
返回最大索引
如果数组[curr\u idx]。长度>数组[max\u index]。长度:
最大索引=当前idx
#递归调用
返回最长的辅助对象(最大索引,当前idx+1,数组)
然后我会继续下课,告诉教授给学生们下一次递归真正有用的问题
因为看起来数组没有排序,所以最简单(也是最快)的方法就是遍历整个过程(伪代码):
这是你两天来关于递归的第四个问题。你把家庭作业标签贴上是好的,但是你的时间应该花在理解递归是如何工作的上 我的建议是拿几张彩色光盘(扑克筹码或一套扑克牌效果很好),手动算出递归解决方案,然后回来看看你一直在问的问题
很可能你自己就能回答所有的问题。你也可以接受答案,当你面对更棘手的问题时,你将来得到回答的机会也会增加。这是你两天来关于递归的第四个问题。你把家庭作业标签贴上是好的,但是你的时间应该花在理解递归是如何工作的上 我的建议是拿几张彩色光盘(扑克筹码或一套扑克牌效果很好),手动算出递归解决方案,然后回来看看你一直在问的问题
很可能你自己就能回答所有的问题。你也可以接受答案,这样当你面对更棘手的问题时,你就有更多的机会得到回答。。我甚至没有意识到,如此一来,组合图像/链接就得到了支持!如果样式/HTML可以使图像链接更明显(作为链接),那就太好了。必须是递归的。我甚至没有意识到,如此一来,组合图像/链接就得到了支持!如果样式/HTML可以使图像链接更明显(作为链接),那就太好了。必须是递归的不幸的是,我知道,我一直很难看到递归调用是如何工作的以及何时被调用的。这就是我在上面真诚建议的原因。你需要弄清楚基本原理。是的,我知道,我一直很难看到递归调用是如何工作的,以及它们何时被调用。这就是我上面真诚建议的原因。你需要弄清楚基本情况。
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;
}
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