首页 > 编程语言 >算法练习-day46

算法练习-day46

时间:2023-08-11 18:00:33浏览次数:38  
标签:arr 元素 top 练习 算法 vector day46 nums1 nums2

单调栈

739. 每日温度

题意:给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

实例:

算法练习-day46_单调栈

思路:本题作为单调栈的第一道题,我们需要了解什么是单调栈?单调栈中存储的是什么??

单调栈,顾名思义就是利用栈和队列的特殊结构去解决问题。而栈中存储的则需我们需要遍历的元素。

对于本题,我们需要做的就是按照一定规律将元素一次性遍历完。单调栈中存储的则是我们遍历元素的下标。根据题意:单调栈中存储的是一个增序序列,即从顶到底元素依次增大,当需要对比的元素大于栈顶元素时,就说明栈顶元素的第一个比他大的元素找到了,就可以输出arr[s.top()]=i-s.top();并且释放保存的栈顶元素,证明其没有作用了,循环遍历,直到站内没有元素或该对比元素小于栈顶元素时,就说明结束本次遍历,将对比元素temperatures[i]保存起来。遍历完所有元素,本题结束

C++代码:

vector<int> dailyTemperatures(vector<int>& temperatures) {
        vector<int> arr(temperatures.size(),0);
        stack<int> s;
        s.push(0);
        for(int i=1;i<temperatures.size();i++)
        {
            while(!s.empty()&&temperatures[i]>temperatures[s.top()])
            {
                arr[s.top()]=i-s.top();
                s.pop();
            }
            s.push(i);
        }
        return arr;
    }

496. 下一个更大元素 I

题意:nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。

对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1 。

返回一个长度为 nums1.length 的数组 ans 作为答案,满足 ans[i] 是如上所述的 下一个更大元素 。

实例:

算法练习-day46_单调栈_02

思路:本题我们采用两次for循环,先创建一个数组tmp,用于存储nums2中每个元素的下一个比它大的元素值,然后在使用一次for循环,找到nums1中的元素,并将对应的最大值保存到数组arr中。虽然这个代码写起来有点重复,但是这组代码的时间复杂程度还是O(n^2);还有一种做法是给出一个map用于保存nums1和nums2的映射关系,我觉得还是太占用空间了,这里就没有给出。

C++代码:

   vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        vector<int> tmp(nums2.size(),-1);
        stack<int> s;
        s.push(0);
        for(int i=1;i<nums2.size();i++)
        {
            while(!s.empty()&&nums2[i]>nums2[s.top()])
            {
                tmp[s.top()]=nums2[i];
                s.pop();
            }
            s.push(i);
        }
        vector<int> arr(nums1.size());
        for(int i=0;i<nums1.size();i++)
        {
            for(int j=0;j<nums2.size();j++)
            {
                if(nums1[i]==nums2[j])
                {
                    arr[i]=tmp[j];
                }
            }
        }
        return arr;
    }

标签:arr,元素,top,练习,算法,vector,day46,nums1,nums2
From: https://blog.51cto.com/u_15209404/7050808

相关文章

  • 从Bellman方程到派单与调度算法(二)-- 派单算法
    在派单决策中的MDPMDP构建在派单决策中,构建MDP来表示不同时空下的价值,并应用到线上派单中。以司机为智能体,有:S:时间和空间预先划分为时间片和六边形区域,每一个(时间片-六边形)表示一个状态A:两种动作:接单和空闲。P:接单会100%概率转移到状态(完单时间片,终点六边形),不接单会100%......
  • 从Bellman方程到派单与调度算法
    Bellman方程在派单和调度中的应用 从MP到MRP再到MDPMPM={S,P}马尔科夫过程。后续的状态只与当前状态有关,与当前状态之前的状态无关。 MRPM={S,P,R,γ}马尔科夫奖励过程。在马尔科夫过程的基础上增加了奖励R和衰减系数γ<0。定义Gt为在此时刻到过程结束后所得......
  • 文心一言 VS 讯飞星火 VS chatgpt (74)-- 算法导论7.2 2题
    二、如果用go语言,当数组A的所有元素都具有相同值时,QUICKSORT的时间复杂度是什么?文心一言:在Go语言中,对一个所有元素都相等的数组进行快速排序(QuickSort)的时间复杂度是O(nlogn)。快速排序是一种分而治之的排序算法,它将一个数组分成两个子数组,然后对这两个子数组进行递归排序。......
  • 练习二:证件照换背景
    这个有很多种方法,这里就说一下比较简单的方法方法一打开一张证件照,假设是蓝底的证件照,然后选择图像-->调整-->替换颜色 然后按照如下所示即可换背景 但是这个方法对于有些头发丝的话可能不太友好,像这种比较简单的照片用魔棒工具选择颜色选区再换背景颜色也很快 注意:......
  • 面试算法学习1
    蛇形矩阵微软面试题题目描述输入两个整数\(n\)和\(m\),输出一个\(n\)行\(m\)列的矩阵,将数字\(1\)到\(n\timesm\)按照回字蛇形填充至矩阵中。具体矩阵形式可参考样例。输入格式输入共一行,包含两个整数\(n\)和\(m\)。输出格式输出满足要求的矩阵。矩阵占\(......
  • 路径规划算法:基于食肉植物优化的机器人路径规划算法- 附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 路径规划算法:基于广义正态分布优化的机器人路径规划算法- 附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 路径规划算法:基于战争策略优化的机器人路径规划算法- 附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 第一章总练习题
    要记住:         以后经常要用到上述技巧,把最大(小)值进行转化。记住习题12、13的结论。两个奇函数之和为奇函数,其积为偶函数。两个偶函数之和与积都为偶函数。奇函数和偶函数之积为奇函数。掌握和差化积公式和积化和差公式。    ......
  • 探索美颜SDK技术:实现精准人脸美化的算法与挑战
    在现代社交媒体和直播平台的兴起中,美颜技术已成为一种不可或缺的元素,让用户能够在镜头前展现出最佳的自己。这种技术的背后有着复杂而精密的算法,由美颜SDK驱动,以实现精准人脸美化。本文将探讨这些算法的核心原理、应用领域以及挑战。一、美颜SDK技术背后的核心原理 美颜SDK技术旨......