leetcode每日一题51

话说最近工作也步入正轨了

稍微。。。也适应了工作的节奏。。。

希望能让自己的个人简历好看一点吧

有时候很悲观,觉得自己现在的岗位不太行,虽然需要编程能力,但是如果跳槽,可能变成数据分析的类型了。。。

不知道未来如何,先用知识武装自己吧。。。

152.乘积最大子数组

这是一道动态规划

dp[i] = dp[i-1] * ai

= ai

要么等于上一位的最大乘积与当前位相乘,要么等于当前位

但这样忽略了负负得正乘积

因此,要同时维护两个dp数组,一个是最大乘积,一个是最小乘积

dp[i]min = dp[i-1]min * ai

= dp[i-1]max * ai

= ai

dp[i]max = dp[i-1]min * ai

= dp[i-1]max * ai

= ai

这里官方题解里有一句

cpp 复制代码
vector <long> maxF(nums.begin(),nums.end())

这段代码是 C++ 中使用 std::vector 的一种初始化方式。具体来说,它的语法使用了 范围构造函数 来初始化两个 std::vector 对象 maxF 和 minF,并将 nums 中的所有元素拷贝到它们中

cpp 复制代码
return *max_element(maxF.begin(), maxF.end());

这段代码使用了 C++ 的标准库函数 std::max_element,返回的是 maxF 容器中的最大元素。

太久没写cpp了呃啊

cpp 复制代码
class Solution {
public:
    int maxProduct(vector<int>& nums) {
        vector<long> dpmax(nums.begin(),nums.end()),dpmin(nums.begin(),nums.end());
        for(int i=1;i<nums.size();i++)
        {
            dpmax[i] = max(dpmax[i-1] * nums[i],max(dpmin[i-1]*nums[i],(long)nums[i]));
            dpmin[i] = min(dpmin[i-1] * nums[i],min(dpmax[i-1]*nums[i],(long)nums[i]));
        }
        return *max_element(dpmax.begin(),dpmax.end());
    }
};

以后可能还会做一下python和java

哎。。。

相关推荐
持续学习的程序员+13 分钟前
强化学习阶段性总结
人工智能·算法
爱装代码的小瓶子18 分钟前
【cpp知识铺子】map与set的底层AVL树
开发语言·数据结构·c++·b树·算法·链表
IT·小灰灰19 分钟前
腾讯HY2.0 Think推理模型深度解析:技术突破、应用场景与实践指南
开发语言·人工智能·python·深度学习·神经网络·算法·数据分析
修炼地29 分钟前
代码随想录算法训练营第二十八天 | 动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
c++·算法·动态规划
小南家的青蛙36 分钟前
LeetCode第773题 - 滑动谜题
算法·leetcode·职场和发展
Felven1 小时前
C. Isamatdin and His Magic Wand!
c语言·数据结构·算法
AndrewHZ1 小时前
【芯芯相印】什么是算法定点化?
pytorch·算法·芯片设计·模型量化·定点化·芯片算法·逻辑电路
数据科学小丫1 小时前
算法:线性回归
算法·回归·线性回归
剪一朵云爱着1 小时前
PAT 1131 Subway Map
算法·pat考试·图论
CoderYanger1 小时前
动态规划算法-子序列问题(数组中不连续的一段):30.最长数对链
java·算法·leetcode·动态规划·1024程序员节