代码随想录训练营Day32

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

今天是跟着代码随想录刷题的第32天,主要是学了买卖股票的最佳时机2,跳跃游戏,跳跃游戏2和k次取反后最大化的数组和


一、买卖股票的最佳时机2

思路:这道题思路直接秒,如果下一个比这个高,如果我还没买,就赶紧入手,如果买了就跳过,如果下一个比这个低,如果我还没卖,就赶紧卖,注意这个循环得到最后一个的前一个,最后一个得判断,如果还没卖就赶紧卖,为啥最后一个不用判断高还是低,是因为最后一个既然能处于可以卖的情况,就说明他一定比倒数第二个还要大,这样倒数第二个才不会卖。

cpp 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
    int a=0,result=0;
    int buy=0;
    for(int i=0;i<prices.size()-1;i++)
    {
        if(prices[i+1]>prices[i])
        {
           if(a==0) 
           {
            buy=prices[i];
            a=1;
           }
            else continue; 
        }
        else if(prices[i+1]<prices[i])
        {
            if(a==1)
            {
                result=result+prices[i]-buy;
                a=0;
            }
            else continue;
        }
    }
    if(a==1) result=result+prices[prices.size()-1]-buy;
    return result;
    }
    
};

二、跳跃游戏

思路:从第一个开始,看范围能不能遍历到最后一个,不过需要始终更新最大的范围,如果循环完了还不能跳到最后一个就说明永远不能跳到最后一个了。

cpp 复制代码
class Solution {
public:
    bool canJump(vector<int>& nums) {
    int cover=nums[0];
    for(int i=0;i<=cover;i++)
    {
        cover=max(cover,i+nums[i]);
        if(cover>=nums.size()-1) return true;       
    }
    return false;
    }
};

三、跳跃游戏2

思路:跳下一个的时候,检查这一个的范围哪一个下一个跳的最远,就选这个跳的最远的去跳就可以了,注意start要放到循环外面去改。不然会影响循环的参数。

cpp 复制代码
class Solution {
public:
    int i=0;
    int path=0;
    int start=0;
    int cover=0;
    int next=0;
    int jump(vector<int>& nums) {
    if(nums.size()==1) return 0;
    cover=nums[0];
    while(nums[start]+start<nums.size()-1)
    {   
        path++;
        cover=0;
        for(i=start+1;i<=start+nums[start];i++)
        {
            
            if(i<=nums.size()-1&&nums[i]+i>cover)
            {
                cover=nums[i]+i;
                next=i;
            }
               
        }
        start=next;   
    }
    path++;
    return path;

    }
};

四、K次取反后最大化的数组和

思路:就是让最小的负数先取反,如果取完了,再让小的正数取反,再求和

代码:

cpp 复制代码
class Solution {
public:
    int largestSumAfterKNegations(vector<int>& nums, int k) {
    sort(nums.begin(),nums.end());
    int fu=0,feifu=0,result=0;
    int i;
    for(i=0;i<nums.size();i++)
    {
        if(nums[i]<0) fu++;
    }
    if(k<=fu)
    {
        for(i=0;i<nums.size();i++)
        {
            if(i<k)
            {
                result=result-nums[i];
            }
            else result=result+nums[i];   
        }
    }
    if(k>fu)
    {
        for(i=0;i<nums.size();i++)
        {
            if(i<fu)
            {
                nums[i]=-nums[i];
            }
        }
        sort(nums.begin(),nums.end());
        if((k-fu)%2==1)
        {
            nums[0]=-nums[0];    
        }
        for(i=0;i<nums.size();i++)
        {
            result=result+nums[i];
        }
    }
    return result;
    }
};
相关推荐
一米阳光86616 小时前
软考(中级)软件设计师核心笔记(9)算法——时间复杂度与空间复杂度、查找算法、排序算法
笔记·算法·职场发展·软考·软件设计师·中级职称
Mem0rin7 小时前
二分查找:左右边界
数据结构·算法
大明者省16 小时前
WSL2 Ubuntu22.04 GPU训练环境配置指南
人工智能·算法·计算机视觉
白狐_79818 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander25818 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
Shell运维手记19 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
杨航 AI19 小时前
O(n log n):线性对数原理拆解 这个是排序算法的黄金复杂度之一。
算法·排序算法
船厂电气自动化ai大模型19 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
旖旎夜光19 小时前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
叠层归一研究院21 小时前
AGI 系统(十一):二阶网络 — 二阶递归 × 多主体 (元符号网络)
开发语言·人工智能·算法·php·agi