735. 替换为右侧最大值

给一整数数组, 用当前元素之后数组中的最大元素来替换当前元素(右侧的最大元素). 因为最后一个元素的右边没有元素了, 所以用 -1 来替换这个值. 举个例子, 如果数组为 [16,17,4,3,5,2], 那么它就需要修改为 [17,5,5,5,2,-1].

样例

给出数组 nums = [16,17,4,3,5,2], 改变数组为 [17,5,5,5,2,-1], 你需要在原地实现。

没有什么骚操作,就是很普通的找当前右边最大值然后替换,第一次交就过了

 1 void arrayReplaceWithGreatestFromRight(vector<int> &nums) {
 2         // Write your code here.
 3         int i=0, j;
 4         int max_index;
 5         while(i<nums.size()){
 6             j=i+1;
 7             max_index=i;
 8             while(j<nums.size()){//找当前右边最大值
 9                 if(nums[j]>nums[max_index]){
10                     max_index=j;
11                 }
12                 j++;
13             }
14             while(i<max_index){//找到后存到max_index,然后替换
15                 nums[i]=nums[max_index];
16                 i++;
17             }
18             nums[i]=INT_MIN;
19             if(max_index==nums.size()-1){
20                 nums[max_index]=-1;
21                 break;
22             }
23         }
24     }

 然后看了一眼别人的答案,发现我这个真的是老实人的顺序做法

聪明的直接逆序,max初始化为最后,逆着覆盖过去,如果有比max大的,update max。

这样效率高得多,我这个解法还多一个找局部最大的过程。

原文地址:https://www.cnblogs.com/TheLaughingMan/p/8444059.html