zl程序教程

您现在的位置是:首页 >  其它

当前栏目

1299. 将每个元素替换为右侧最大元素

元素 最大 替换 每个 右侧
2023-09-14 09:06:53 时间

1299. 将每个元素替换为右侧最大元素

给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换。

完成所有替换操作后,请你返回这个数组。

示例 1:

输入:arr = [17,18,5,4,6,1]
输出:[18,6,6,6,1,-1]
解释:

  • 下标 0 的元素 --> 右侧最大元素是下标 1 的元素 (18)
  • 下标 1 的元素 --> 右侧最大元素是下标 4 的元素 (6)
  • 下标 2 的元素 --> 右侧最大元素是下标 4 的元素 (6)
  • 下标 3 的元素 --> 右侧最大元素是下标 4 的元素 (6)
  • 下标 4 的元素 --> 右侧最大元素是下标 5 的元素 (1)
  • 下标 5 的元素 --> 右侧没有其他元素,替换为 -1

示例 2:

输入:arr = [400]
输出:[-1]
解释:下标 0 的元素右侧没有其他元素。

解题代码如下:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* replaceElements(int* arr, int arrSize, int* returnSize){
    int max[arrSize];
    int i=0;
    int maxt=arr[arrSize-1];
    for(i=arrSize-1;i>=0;i--){
        if(arr[i]>maxt){
            max[i]=arr[i];
            maxt=arr[i];
        }
        else{
            max[i]=maxt;
        }


    }
    for(i=0;i<arrSize-1;i++){
        arr[i]=max[i+1];
    }
    arr[i]=-1;
    *returnSize=arrSize;
    return arr;
    

}