Java 将每个元素替换为下一个最大的元素(按升序,不替换为-1)
目前正在研究一种算法,用下一个最大的元素替换每个元素,但与这里的其他一些问题不同,如果不存在这样的数字,这个问题不涉及将值替换为-1,并且必须按升序排列 给定这个输入:{1,5,-3,2,8,4,7,10,3,11,2} 必须得到这个输出:1 5 5 8 8 10 11 11 这就是我到目前为止所做的: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
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,我现在看到了。非常感谢!哎呀,我现在明白了。非常感谢!