当前位置: 首页 > wzjs >正文

中英文双语网站站点如何做好一个企业网站

中英文双语网站站点,如何做好一个企业网站,电商网站建设源码,网站的宣传方法有哪些LeetCode 热题 100_乘积最大子数组(88_152) 题目描述:输入输出样例:题解:解题思路:思路一(暴力破解法(双重循环)):思路二(动态规划): …

LeetCode 热题 100_乘积最大子数组(88_152)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(暴力破解法(双重循环)):
        • 思路二(动态规划):
      • 代码实现
        • 代码实现(思路一(暴力破解法)):
        • 代码实现(思路二(哈希表)):
        • 以思路二为例进行调试

题目描述:

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续 子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

测试用例的答案是一个 32-位 整数。

输入输出样例:

示例 1:
输入: nums = [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。

示例 2:

输入: nums = [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

提示:
1 <= nums.length <= 2 * 104
-10 <= nums[i] <= 10
nums 的任何子数组的乘积都 保证 是一个 32-位 整数

题解:

解题思路:

思路一(暴力破解法(双重循环)):

1、计算所有的子数组的乘积,记录其中乘积的最大值,每个子数组的范围为 left~right(left 和 right 代表数组下标)。
2、复杂度分析:
① 时间复杂度:O(n2),n代表数组中元素的个数,使用了双重循环。
② 空间复杂度:O(1)

思路二(动态规划):

1、因数组中的元素既有正数又有负数,这样我们需要分情况讨论(由于负数的存在,当前最小乘积在遇到负数时可能会转为最大乘积,从而有可能影响最终的最大值。)。此解法通过动态维护当前最大乘积最小乘积来有效地解决问题。

四种情况如下
假设有nums=[a,b],假设a!=0,b!=0。

  1. a>0,b>0 乘积最大为 a*b。
  2. a>0,b<0 乘积最大为 a。
  3. a<0,b>0 乘积最大为 b。
  4. a<0,b<0 乘积最大为 a*b。

:nums = [2,3,-2,4]
之前的最大乘积为:pre_max,之前的最小乘积为:pre_min
当前的最大乘积为:cur_max,当前的最小乘积为:cur_min

① i=0 ,初始化 pre_max = pre_min = cur_max = cur_min = nums[ 0 ] = 2 。
② i=1 ,cur_max = max{nums[ 1 ],nums[ 1 ] × pre_min,nums[ 1 ] × pre_max } =6, cur_min = min{nums[ 1 ],nums[ 1 ] × pre_min,nums[ 1 ] × pre_max} = 3。
③ i=2,cur_max = max{nums[ 2 ],nums[ 2 ] × pre_min,nums[ 2 ] × pre_max } = -2,cur_min = min{nums[ 2 ],nums[ 2 ] × pre_min,nums[ 2 ] × pre_max} = -12。
④ i=3,cur_max = max{nums[ 3 ],nums[ 3 ] × pre_min,nums[ 3 ] × pre_max } = 4,cur_min = min{nums[ 3 ],nums[ 3 ] × pre_min,nums[ 3 ] × pre_max} = -48。
在此过程中记录最大的 cur_max=6 最为乘积最大子数组。

3、复杂度分析
① 时间复杂度:O(n),n代表数组中元素的个数。因只遍历一遍数组。
② 空间复杂度:O(1)。

代码实现

代码实现(思路一(暴力破解法)):
class Solution1 {
public:// 函数:maxProduct,计算给定数组中子数组的最大乘积int maxProduct(vector<int> &nums) {// 初始化答案为最小的整数值,后续将通过比较更新答案int ans = INT_MIN;// 外层循环:从每个可能的子数组起始位置开始for (int left = 0; left < nums.size(); left++) {// 初始化当前子数组的乘积为 1int cur_product = 1;// 内层循环:从 left 位置开始向右遍历,计算当前子数组的乘积for (int right = left; right < nums.size(); right++) {// 更新当前子数组的乘积cur_product *= nums[right];// 更新答案为当前子数组的乘积和之前答案的较大值ans = max(cur_product, ans);}}// 返回找到的最大乘积return ans;}
};
代码实现(思路二(哈希表)):
class Solution2 {
public:// 函数:maxProduct,计算给定数组中子数组的最大乘积int maxProduct(vector<int> &nums) {// 初始化答案为数组的第一个元素long long ans = nums[0];// 初始化当前最大乘积和最小乘积,均为数组的第一个元素long long cur_max = nums[0], cur_min = nums[0];// 从第二个元素开始遍历数组for (int i = 1; i < nums.size(); i++) {// 保存前一次的最大乘积和最小乘积long long pre_max = cur_max, pre_min = cur_min;// 计算当前最大乘积:// 1. nums[i] 本身// 2. nums[i] * 前一次的最大乘积// 3. nums[i] * 前一次的最小乘积cur_max = max(max((long long)nums[i], nums[i] * pre_max), (long long)nums[i] * pre_min);// 计算当前最小乘积:// 1. nums[i] 本身// 2. nums[i] * 前一次的最大乘积// 3. nums[i] * 前一次的最小乘积cur_min = min(min((long long)nums[i], nums[i] * pre_max), (long long)nums[i] * pre_min);// 更新答案为当前最大乘积和之前答案的较大值ans = max(ans, cur_max);}// 返回找到的最大乘积return ans;}
};
以思路二为例进行调试
#include<iostream>
#include<vector>
using namespace std;class Solution2 {
public:// 函数:maxProduct,计算给定数组中子数组的最大乘积int maxProduct(vector<int> &nums) {// 初始化答案为数组的第一个元素long long ans = nums[0];// 初始化当前最大乘积和最小乘积,均为数组的第一个元素long long cur_max = nums[0], cur_min = nums[0];// 从第二个元素开始遍历数组for (int i = 1; i < nums.size(); i++) {// 保存前一次的最大乘积和最小乘积long long pre_max = cur_max, pre_min = cur_min;// 计算当前最大乘积:// 1. nums[i] 本身// 2. nums[i] * 前一次的最大乘积// 3. nums[i] * 前一次的最小乘积cur_max = max(max((long long)nums[i], nums[i] * pre_max), (long long)nums[i] * pre_min);// 计算当前最小乘积:// 1. nums[i] 本身// 2. nums[i] * 前一次的最大乘积// 3. nums[i] * 前一次的最小乘积cur_min = min(min((long long)nums[i], nums[i] * pre_max), (long long)nums[i] * pre_min);// 更新答案为当前最大乘积和之前答案的较大值ans = max(ans, cur_max);}// 返回找到的最大乘积return ans;}
};int main(int argc, char const *argv[])
{vector<int> nums={1,0,-5,2,3,-8,-9};Solution2 s;cout<<s.maxProduct(nums);return 0;
}

LeetCode 热题 100_乘积最大子数组(88_152)原题链接
欢迎大家和我沟通交流(✿◠‿◠)


文章转载自:

http://1148la0l.rgmLs.cn
http://WQlOX2GK.rgmLs.cn
http://JZqeW3uh.rgmLs.cn
http://RuiBl1O9.rgmLs.cn
http://3xcfmguc.rgmLs.cn
http://sQbEVb8S.rgmLs.cn
http://K7rECbbv.rgmLs.cn
http://bpOyotjc.rgmLs.cn
http://nXPCyN0Q.rgmLs.cn
http://rfLojmMb.rgmLs.cn
http://7y3Nj6aO.rgmLs.cn
http://e9NQ6dIA.rgmLs.cn
http://rMSHhdvu.rgmLs.cn
http://s0XHSr5d.rgmLs.cn
http://yrQcAY0B.rgmLs.cn
http://Bk0HkCAA.rgmLs.cn
http://p7x58TET.rgmLs.cn
http://eGtrBIQv.rgmLs.cn
http://A8Uqtd7s.rgmLs.cn
http://9SJUQuMh.rgmLs.cn
http://vqzhlIZB.rgmLs.cn
http://w2LoCQ6P.rgmLs.cn
http://KUccV6s0.rgmLs.cn
http://Xq6Orruf.rgmLs.cn
http://ZjUpkKLz.rgmLs.cn
http://QUUiTW5d.rgmLs.cn
http://VS09Y1DN.rgmLs.cn
http://2rizVNkC.rgmLs.cn
http://nijw0qpY.rgmLs.cn
http://gq3dW21H.rgmLs.cn
http://www.dtcms.com/wzjs/678427.html

相关文章:

  • 企业建网站哪家好创一家网站
  • 佛山选择免费网站优化wordpress只显示文本摘要
  • 网站打不开被拦截怎么办网页制作购物网站
  • 做衣服的网站推荐福田欧曼银河报价
  • 手工做衣服网站有哪些广州哪里有外贸网站
  • 怎样建设网站教程使用网站模板侵权吗
  • 学校网站 建设常德网站公司
  • 东平可信的网站建设短链接生成网
  • 自己有网站 做app太仓公司网站建设电话
  • 做网站的要多钱wordpress数据表格
  • 一键生成海报的网站wordpress如何防注入
  • 网页设计与编程福州专业的seo软件
  • wordpress模板怎么安装教程视频做网站优化的
  • 坪山网站建设公司东莞横沥中学
  • 陕西省住建厅网站官网做食品的网站设计要注意
  • 浪子做的阿哲喊麦网站多少wordpress手机移动主题
  • 云主机建站网站建设具体详细过程
  • 专业商城网站建设多少钱centos支持wordpress
  • 网站建设规划书河北专门做办公的网站
  • 河南省住房城乡和建设厅网站首页wordpress 指南
  • 网站如何做微信支付链接建设个人网站教程
  • 一点空间网站建设wordpress启动慢
  • 建设网站报价单手机网站 建设
  • 三合一网站什么意思注册深圳公司的好处
  • 西部数码官方网站建设工程教育app
  • 建设网站需要花多少钱国家建设部网站2018年
  • 哪些网站可以做推广阿里云备案个人可以做网站吗
  • 温州电子商务网站建设商城模板网站模板
  • 加猛挣钱免费做网站软件网站开发所需人才
  • 做网站需要哪些成本电子 网站建设申请过程