• 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。

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

  • 相关阅读:
    基于OWin的Web服务器Katana发布版本3
    如何在.NET上处理二维码
    .NET开源OpenID和OAuth解决方案Thinktecture IdentityServer
    ASP.NET Identity V2
    Azure Redis Cache
    CentOS 7 安装RabbitMQ 3.3
    ASP.Net MVC 5 in Xamarin Studio 5.2
    Centos 7.0 安装Mono 3.4 和 Jexus 5.6
    CentOS下GPT分区(转)
    CentOS下使用LVM进行分区(转)
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/8444059.html
Copyright © 2020-2023  润新知