解题思路:
从右到左遍历数组每个元素,把当前元素放到一个临时变量中,然后把右边最大值max赋值给当前元素,然后再把最大值与临时变量相比,如果临时变量大与最大值max,那就把临时变量赋值给max,于是有了新的最大值,否则,保持max最大值。
以下是代码和解释:
class Solution {
public:
vector<int> replaceElements(vector<int>& arr) {
int temp=0; //临时变量
int len=arr.size(); //数组长度
int max=arr[len-1]; //从右算起,第一个最大值是最后一个元素
arr[len-1]=-1; //根据题目把最后的元素赋值为-1
for(int i=len-2;i>=0;i--) //从数组倒数第二个元素,遍历所有元素
{
temp=arr[i]; //先把当前元素赋值给临时变量 以免被覆盖 以便回头跟max最大值做对比
arr[i]=max; //先把max赋值给当前元素
if(temp>max) //然后就可以拿max跟临时变量对比,看是否需要更新最大值max
{
max=temp; //如果需要,就更新
}
}
return arr;
}
};