最大子数组的和以及最大子数组的乘积
来源:互联网 发布:python for 一行 编辑:程序博客网 时间:2024/06/06 14:02
正如题目所述,这个写了两个代码,有点类似,但有些差别。
子数组的乘积稍难。
用动态规划解题,转移方程是
dp[t] = func(arr[t], operater(dp[t-1], arr[t]))
下面是代码:
#include <iostream>#include <cstring>#include <cstdlib>using namespace std;float get_abs(const float &val){ return val > 0 ? val : -val;}template <typename T>T get_min(const T &val1, const T &val2){ return val1 > val2 ? val2 : val1;}template <typename T>T get_max(const T &val1, const T &val2){ return val1 > val2 ? val1 : val2;}float get_max_sub_mul(float arr[], int len){ int i = 0; float last_max = 1.0; float last_min = 1.0; float maxp = 0.0; float cur_max = 1.0; float cur_min = 1.0; for (i = 0; i < len; i++) { // last_max last_min 需要存储前面的值,因为需要用两次。 cur_max = get_max<float>(arr[i], get_max<float>(arr[i]*last_max, arr[i]*last_min)); cur_min = get_min<float>(arr[i], get_min<float>(arr[i]*last_max, arr[i]*last_min)); maxp = get_max<float>(maxp, cur_max); last_max = cur_max; last_min = cur_min; } return maxp;}int get_max_sum_arr(int arr[], int len){ int i = 0; int maxp = 0; int max_tmp = 0; int start_ind = 0; int end_ind = 0; for (i = 0; i < len; i++) { if (max_tmp + arr[i] > arr[i]) { max_tmp = max_tmp + arr[i]; } else { max_tmp = arr[i]; start_ind = i; } if (max_tmp > maxp) { maxp = max_tmp; end_ind = i; } } std::cout << "start_ind, end_ind: " << start_ind << ", " << end_ind << endl; std::cout << "max sum: " << maxp << std::endl; return maxp;}int main(int argc, char *argv[]){ int arr[] = {1, -2, 3, 10, -4, 7, 2, -5}; int len = sizeof(arr) / sizeof(int); std::cout << "array data" << std::endl; int i = 0; for (i = 0; i < len; i++) { std::cout << arr[i] << " "; } std::cout << std::endl; std::cout << "max sub sum arr: " << get_max_sum_arr(arr, len) << std::endl; std::cout << "--------------------------" << std::endl; std::cout << "--------------------------" << std::endl; //float arr_f[] = {1, -2, 3, 0.25, 10, -4, 0.35, 7, 2, -5}; float arr_f[] = {1, -2, 0, 3, 0.25, 10, -4, 0.35, 7, 2, -5}; len = sizeof(arr_f) / sizeof(float); std::cout << "array data float: " << std::endl; i = 0; for (i = 0; i < len; i++) { std::cout << arr_f[i] << " "; } std::cout << std::endl; std::cout << "max sub sum arr: " << get_max_sub_mul(arr_f, len) << std::endl; return 0;}
阅读全文
0 0
- 子数组的最大乘积 子数组最大和
- 最大子数组的和以及最大子数组的乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 子数组的最大乘积
- 专访 | 余承东:华为三大智能平台先从国内发力
- 京东推游戏手机标准背后 重塑手机产业生产模式
- Java并发编程之原子变量
- AlphaGo Zero 模型框架
- leetCode 637. Average of Levels in Binary Tree 求二叉树每层平均值
- 最大子数组的和以及最大子数组的乘积
- 122. Best Time to Buy and Sell Stock II
- PyCharm使用技巧:Ctrl + /(多行注释)
- 游戏背景音乐
- Android系统prop属性的研究与分析(二)
- CentOS安装邮件服务器
- 关于Android studio使用外来项目,以导入zxing包为例子
- Generative Adversarial Nets
- 全面解析Arrays.sort——JDK源码解析