博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法周记12.2
阅读量:2394 次
发布时间:2019-05-10

本文共 1561 字,大约阅读时间需要 5 分钟。

 

 分析: 可以在O(n)的时间复杂度之内解决问题,方式是在遍历的过程中记录乘积的最大值pos_value(大于等于0)和乘积最小值neg_value(小于等于0)。

初始时这些值设为0。

当遇到一个数a时:

若a为正数,pos_value为a(考虑pos_value为0的情况)与pos_value*a之中的较大的值。neg_value为neg_value与a的乘积(负数乘以一个正数会变得更小,若neg_value为0, 相乘之后仍然为0)

若a为负数, pos_value为neg_value与a的乘积。neg_value为a(考虑pos_value为0的情况)与pos_value*a中的较小的值。

若a为0,则置pos_value与neg_value为0。

在以上过程中,所有pos_value中的最大的值即为答案。

代码如下:

int maxProduct(vector
& nums) { int size = nums.size(); if(size == 0) return 0; if(size == 1) return nums[0]; int pos_value = 0, neg_value = 0; int result = INT_MIN; for(int i = 0; i < size; i++) { if(nums[i] > 0) { pos_value = max(nums[i], pos_value*nums[i]); // pos可能为0 neg_value = neg_value*nums[i]; } else if(nums[i] < 0) { int tmp = pos_value; pos_value = neg_value*nums[i]; neg_value = min(nums[i],tmp*nums[i]); //pos可能为0 } else { pos_value = 0; neg_value = 0; } result = max(result, pos_value); } return result;}

分析: 需要注意到,这一题使用贪心算法无法找到最优解。比如说n=12时,贪心算法得到的值为12=9+1+1+1,结果为4,但实际上最优解为12=4+4+4,结果为3。

可以使用动态规划来解决问题:

dp[n] = min{dp[n-i*i]+1} 

其中dp[n]表示值为n时的最少个数。i为所有满足n-i*i>=0。当n-i*i=0时,表示n恰好可由i*i表示。另外,dp[0] = 0

代码如下:

int numSquares(int n) {    if(n == 0)        return 0;    vector
dp(n+1, 0); dp[1] = 1; for(int i = 2; i <= n; i++) { int min_value = INT_MAX; for(int j = 1; j*j <= i; j++) { min_value = min(dp[i-j*j]+1, min_value); } dp[i] = min_value; } return dp[n];}

 

转载地址:http://nwwob.baihongyu.com/

你可能感兴趣的文章
刚进职场的程序员,请万分珍重你的第一份工作,不要轻易辞职!
查看>>
C/C++之QT攻略——在QT中容易遇到的那些坑,千万别踩了!
查看>>
@90后程序员,“颜值即正义”的现在,程序员应该如何更新穿搭?
查看>>
程序员须知:必须建立个人知识库,它的重要性你需要了解一下!
查看>>
C/C++知识分享番外:如何申请一个腾讯地图用户Key?
查看>>
程序员提高编程技术最有效的一件事?了解一下,迅速提升自己!
查看>>
程序员想找工作怎么办?如果记住这一点,不怕找不到好工作!
查看>>
程序员找工作时,大公司 VS 小公司,应该如何做出正确的选择?
查看>>
适合编写C语言代码的编程软件有哪些?大学生赶紧行动起来!
查看>>
即将步入2020年,程序员如何在新的一年更进一步?你需要这样做
查看>>
编程萌新注意:别再这样问问题了!学会这样快速定位错误内容
查看>>
C/C++编程笔记:经典游戏植物大战僵尸游戏辅助,源码送上
查看>>
五步轻松搞定Linux下的文件同步(备份)
查看>>
从Socket编程看HTTP服务器设计
查看>>
Java SPI机制原理和使用场景
查看>>
Spring IOC循环依赖解决方案分析
查看>>
Mysql explain-type使用详解
查看>>
Mysql explain-Extra(using where,using index)使用详解
查看>>
解决亚马逊调用频率限制问题的sdk框架
查看>>
Ocean设计思路和架构设计
查看>>