首页 > 其他 > 详细

735. 替换为右侧最大值

时间:2018-02-12 12:49:28      阅读:236      评论:0      收藏:0      [点我收藏+]

给一整数数组, 用当前元素之后数组中的最大元素来替换当前元素(右侧的最大元素). 因为最后一个元素的右边没有元素了, 所以用 -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。

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

735. 替换为右侧最大值

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!