当前正在研究一种用下一个最大元素替换每个元素的算法,但是与此处的其他一些问题不同,如果没有这样的数字,则该问题与将值替换为-1无关,并且必须按升序排列。
输入以下内容:{1、5,-3、2、8、4、7、10、3、11、2}
必须获得以下输出:1 5 5 5 8 8 8 10 10 11 11
这是我到目前为止所拥有的:
class Playground {
static void nextGreatest(int arr[]) {
int size = arr.length;
// Initialize the next greatest element
int max_from_right = arr[size - 1];
// Replace all other elements with the next greatest
for (int i = 1; i < size; i++)
{
// Store the current element (needed later for
// updating the next greatest element)
int temp = arr[i];
// Replace current element with the next greatest
arr[i] = max_from_right;
// Update the greatest element, if needed
if(max_from_right < temp) {
max_from_right = temp;
}
}
}
// prints the array
static void printArray(int arr[])
{
for (int i=0; i < arr.length; i++)
System.out.print(arr[i]+" ");
}
public static void main (String[] args) {
int arr[] = {1, 5, -3, 2, 8, 4, 7, 10, 3, 11, 2 };
nextGreatest (arr);
printArray (arr);
}
}
我现在得到以下信息:
1 2 5 5 5 8 8 8 10 10 11
有什么想法吗?
谢谢
答案 0 :(得分:1)
请考虑以下内容:
int currMax = -1;
int[] input = {1, 5, -3, 2, 8, 4, 7, 10, 3, 11, 2};
for (int i = 0; i < input.length; i++){
if (input[i] > currMax){ // if we find a new max element
currMax = input[i];
}
else if (input[i] < currMax){ // if value is less then max we replace it
input[i] = currMax;
}
}
System.out.println(Arrays.toString(input));
> [1, 5, 5, 5, 8, 8, 8, 10, 10, 11, 11]
答案 1 :(得分:1)
(不确定我是否完全理解您的问题,但是基于评论的澄清,这是我的答案...)
似乎您只需要将初始最大初始化更改为第一个元素,而不是最后一个元素。
int currentMax = arr[0];
for (int i = 1; i < size; i++) {
int temp = arr[i];
arr[i] = currentMax;
if(currentMax < temp) {
currentMax = temp;
}
}
该解决方案最终显示为对于每个索引i,到目前为止看到的最大元素是什么。