zoukankan      html  css  js  c++  java
  • Day 60

    第496题:

    给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。

    nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。来源:力扣(LeetCode)

    1、nums1是nums2的子集,我们需要在nums2中寻找nums1内元素后面的第一个比自己大的值,然后存入数组是输出;

      可以利用哈希表来存储此元素和此元素后面第一个比自身大的元素,例如(1,2),将1,2 作为一个键值对put 到map中;

      然后利用栈来寻找每个元素和第一个比它大的元素,遍历数组,首个元素入栈,下一个元素如果大于前个元素,就将前个元素出栈,并且将两元素作为键值对加进map;

      如果后一元素不比前一元素大,就将该元素也入栈,最后先得出后面存在比自身大的元素,然后将不存在的元素和-1组合作为键值对加入map;

      最后遍历nums1,将键对应的值加入结果数组中。

      

    第503题:

    给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。来源:力扣(LeetCode)

    1、和上题差不多,不过现在是一个循环数组,且是求每一个元素下一个比它大的元素,主要是循环数组,说明数组最后的这个元素的后面不一定没有比它大的元素;

      解决方法可以将数组复制一份,两端相同的数组就可以将每个数后面的比它大的数找出来了;

      利用栈来比较每个数和它后面的数的大小,大就将这个大的数数存入结果数组,且自己出栈,不大就不出栈;

      依次得到结果。

      

     

  • 相关阅读:
    使用openssl实现ECDSA签名以及验证功能(附完整测试源码)
    【转载】浅谈Linux内存管理机制
    【转载】Abstract Factory Step by Step --- 抽象工厂
    【转载】动态规划:从新手到专家
    Windows Container 和 Docker:你需要知道的5件事
    十年
    Docker,容器,虚拟机和红烧肉
    新的用户故事待办列表就是一副地图
    MarkDown/reST 文档发布流水线
    docker4dotnet #5 使用VSTS/TFS搭建基于容器的持续交付管道
  • 原文地址:https://www.cnblogs.com/liang-yi-/p/13616556.html
Copyright © 2011-2022 走看看