给定一个数组列表,列表中元素的数量使用递归找到最大元素的位置。
到目前为止,我能够找到最大的元素,但我需要该元素在数组上的位置而不是实际值。
private int getLargestElementLoca(int[] list, int count)
{
int largestValue;
if(count == 1){
return 0;
}
int tempMax = getLargestElementLoca(list,count-1);
largestValue = Math.max(list[count-1],tempMax);
return largestValue;
}
答案 0 :(得分:0)
一个想法可能是将数组递归分成两部分,直到只剩下2或1个元素。找到两个数字或一个最大值很简单并且返回它。然后比较两个返回值并返回最大值
答案 1 :(得分:0)
递归很简单,但你应该知道迭代地做这件事:
private int getMaxLocation(int[] array) {
int maxpos = 0;
int max = Integer.MIN_VALUE;
for (int i = 0; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
maxpos = i;
}
}
return maxpos;
}
如果您是通过递归来完成此操作,则需要跟踪其中的一些变量:
private int getMaxLocation(int[] array, int pos, int max, int maxpos) {
if (pos >= array.length || pos < 0) {
return maxpos;
} else {
int current = array[pos];
if (current > max) {
max = current;
maxpos = pos;
}
return getMaxLocation(array, ++pos, max, maxpos);
}
}
//calling this
int max = getMaxLocation(yourArray, 0, Integer.MIN_VALUE, 0);
答案 2 :(得分:0)
您正走在正确的轨道上,但您只需要进行一些调整。我不会为你编写代码,但这里有一些线索。
如果希望函数返回索引而不是最大值,则需要更改计算返回值的方式和以递归方式使用它。
private int getLargestElementLoca(int[] list, int count)
{
int largestValue;
if(count == 1){
return 0;
}
如果只有一个元素要查看,即list[0]
,则list[0]
将是最大值,0将是其索引。所以返回0在这里是正确的。
int tempMax = getLargestElementLoca(list,count-1);
您已重新定义getLargestElementLoca
,以便返回索引,而不是最大值。这同样适用于您的递归调用,因此tempMax
将成为索引而不是值。这意味着您无法将其直接传递到Math.max
。有些调整是必要的,但请继续阅读。
largestValue = Math.max(list[count-1],tempMax);
Math.max
会返回最大值,但这并不是您想要的。您有两个索引count-1
和其他索引,并且您想要计算较大值的索引。您无法使用Math.max
执行此操作,但可以使用if
语句或条件运算符a ? b : c
。重命名变量也会有所帮助,因为它不再包含最大值。