Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将每个元素替换为下一个最大的元素(按升序,不替换为-1)_Java_Arrays_Algorithm_Dynamic Programming - Fatal编程技术网

Java 将每个元素替换为下一个最大的元素(按升序,不替换为-1)

Java 将每个元素替换为下一个最大的元素(按升序,不替换为-1),java,arrays,algorithm,dynamic-programming,Java,Arrays,Algorithm,Dynamic Programming,目前正在研究一种算法,用下一个最大的元素替换每个元素,但与这里的其他一些问题不同,如果不存在这样的数字,这个问题不涉及将值替换为-1,并且必须按升序排列 给定这个输入:{1,5,-3,2,8,4,7,10,3,11,2} 必须得到这个输出:1 5 5 8 8 10 11 11 这就是我到目前为止所做的: class Playground { static void nextGreatest(int arr[]) { int size = arr.length; // In

目前正在研究一种算法,用下一个最大的元素替换每个元素,但与这里的其他一些问题不同,如果不存在这样的数字,这个问题不涉及将值替换为-1,并且必须按升序排列

给定这个输入:{1,5,-3,2,8,4,7,10,3,11,2}

必须得到这个输出:1 5 5 8 8 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); 

    }
}
班级操场{
静态void nextGreatest(int arr[]){
int size=arr.length;
//初始化下一个最大的元素
int max_from_right=arr[size-1];
//用下一个最大值替换所有其他元素
对于(int i=1;i
我现在得到以下信息:

1 2 5 5 8 10 11

想法


谢谢

请考虑以下几点:

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]
int currMax=-1;
int[]输入={1,5,-3,2,8,4,7,10,3,11,2};
for(int i=0;icurrMax){//如果我们找到一个新的max元素
currMax=输入[i];
}
否则,如果(输入[i] [1, 5, 5, 5, 8, 8, 8, 10, 10, 11, 11]

考虑以下几点:

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]
int currMax=-1;
int[]输入={1,5,-3,2,8,4,7,10,3,11,2};
for(int i=0;icurrMax){//如果我们找到一个新的max元素
currMax=输入[i];
}
否则,如果(输入[i] [1, 5, 5, 5, 8, 8, 8, 10, 10, 11, 11]
(我不确定我是否完全理解你的问题,但根据评论中的澄清,我的答案是…)

似乎您只需要将初始max初始化更改为第一个元素,而不是最后一个元素

int currentMax =  arr[0];

for (int i = 1; i < size; i++) {
    int temp = arr[i];
    arr[i] = currentMax;
    if(currentMax < temp) {
        currentMax = temp;
    }
}
int currentMax=arr[0];
对于(int i=1;i
对于每个索引i,解决方案的最终结果是,到目前为止看到的最大元素是什么。

(我不确定我是否完全理解您的问题,但根据评论中的澄清,我的答案是…)

似乎您只需要将初始max初始化更改为第一个元素,而不是最后一个元素

int currentMax =  arr[0];

for (int i = 1; i < size; i++) {
    int temp = arr[i];
    arr[i] = currentMax;
    if(currentMax < temp) {
        currentMax = temp;
    }
}
int currentMax=arr[0];
对于(int i=1;i

对于每个索引i,解决方案的结果是,到目前为止看到的最大元素是多少。

我认为DP标记不合适。这是贪婪。这里的“下一个最大元素”是什么意思?对于
1,2100,6,7
,输出必须是什么?是否为
1,21001000100
?@David contad指数组中下一个元素的值。如果它大于之前的值,它将替换之后的所有值,直到达到另一个更高的值。我明白了。顺便说一句,除非确切的输出格式至关重要,否则您可能可以用
数组.toString
(来自
java.util
)替换
printary
。我认为DP标记不合适。这是贪婪。这里的“下一个最大元素”是什么意思?对于
1,2100,6,7
,输出必须是什么?是否为
1,21001000100
?@David contad指数组中下一个元素的值。如果它大于之前的值,它将替换之后的所有值,直到达到另一个更高的值。我明白了。顺便说一句,除非确切的输出格式至关重要,否则您可能可以将
printary
替换为
Arrays.toString
(来自
java.util
),问题标记为javaThank感谢您的帮助!对不起,弄错了!根据Java编辑该问题标记为Java谢谢您的帮助!对不起,弄错了!编辑成Java accordinglyYikes,我现在看到了。非常感谢!哎呀,我现在明白了。非常感谢!