做婚礼设计在哪个网站下载素材/求网址

做婚礼设计在哪个网站下载素材,求网址,做一个销售网站需要多少钱,网站psd 模板问题描述 给定由n个整数(包含负整数)组成的序列a1,a2,…,an,求该序列子段和的最大值。规定当所有整数均为负值时定义其最大子段和为0 穷举法 最简单的方法就是穷举法,用一个变量指示求和的开始位置,一个变量指示结束…

问题描述

给定由n个整数(包含负整数)组成的序列a1,a2,…,an,求该序列子段和的最大值。规定当所有整数均为负值时定义其最大子段和为0

穷举法

最简单的方法就是穷举法,用一个变量指示求和的开始位置,一个变量指示结束位置,再一个变量指示当前要加和的位置,每一个开始位置对应n-i个结束位置,遍历一遍就能得到最大值

int maxSubArray(int a[], int n) {int maxsum = 0;for (int i = 0; i < n; i++) {//开始位置for (int j = i; j < n; j++) {//结束位置int nowsum = 0;for (int k = i; k <= j; k++) {nowsum += a[k];if (nowsum > maxsum)maxsum = nowsum;}}}return maxsum;
}

算法有三重循环,时间复杂性为O(n^3)

穷举法优化
当字段的开始下标确定后,要计算[i:j]的字段和可以利用上一次计算的[i:j-1]的字段和,加上a[j]就可以了

int maxSubArray2(int a[], int n) {int maxsum = 0;for (int i = 0; i < n; i++) {//开始位置int nowsum = 0;for (int j = i; j < n; j++) {//结束位置nowsum += a[j];if (nowsum > maxsum)maxsum = nowsum;}}return maxsum;
}

改进后的时间复杂度为O(n^2)

分治法

该问题也可以用分治法解决

分治策略思想如下:
将所给序列a[1:n]分成长度相同的两端a[1:n/2]a[n/2 +1:n],分别求出这两段的最大子段和,则整体序列a[1:n]的最大子段和有以下三种情况

  • a[1:n]的最大子段和与a[1:n/2]的最大子段和相同
  • a[1:n]的最大子段和与a[n/2 +1:n]的最大子段和相同
  • a[1:n]的最大子段和是a[1:n/2]最后一段加a[n/2 +1:n]最开始一段的和

前两种情况可以递归求得。对于第三种情况,可以发现,a[n/2]和a[n/2 +1]都在最大子段里,我们可以从a[n/2]向左、从a[n/2 +1]向右分别计算两个最大字段和s1和s2,s1+s2就是最大子段和

递归方程

MaxSum ( l o w , h i g h ) = { max ⁡ ( 0 , arr [ l o w ] ) if  l o w = h i g h max ⁡ { MaxSum ( l o w , m i d ) MaxSum ( m i d + 1 , h i g h ) CrossSum ( l o w , m i d , h i g h ) otherwise \text{MaxSum}(low, high) = \begin{cases} \displaystyle \max\left(0,\, \text{arr}[low]\right) & \text{if } low = high \\ \displaystyle \max \begin{cases} \text{MaxSum}(low, mid) \\ \text{MaxSum}(mid+1, high) \\ \text{CrossSum}(low, mid, high) \end{cases} & \text{otherwise} \end{cases} MaxSum(low,high)= max(0,arr[low])max MaxSum(low,mid)MaxSum(mid+1,high)CrossSum(low,mid,high)if low=highotherwise

代码

int maxSubArray3(int a[], int left, int right) {if (left == right)return a[left];int mid = (left + right) / 2;int maxleft = maxSubArray3(a, left, mid);int maxright = maxSubArray3(a, mid + 1, right);int maxleftsum = 0, maxrightsum = 0;int nowsum = 0;for (int i = mid; i >= left; i--) {nowsum += a[i];if (nowsum > maxleftsum)maxleftsum = nowsum;}nowsum = 0;for (int i = mid + 1; i <= right; i++) {nowsum += a[i];if (nowsum > maxrightsum)maxrightsum = nowsum;}return max(maxleft, max(maxright, maxleftsum + maxrightsum));
}

T ( n ) = { 2 T ( n 2 ) + O ( n ) n > c O ( 1 ) n ≤ c T(n)=\big \{^{O(1) \quad n\le c}_{2T(\frac{n}{2})+O(n) \quad n>c} T(n)={2T(2n)+O(n)n>cO(1)nc
根据master定理,我们得到
T ( n ) = O ( n l o g ) T(n)=O(nlog) T(n)=O(nlog)

比起穷举法的O(n^2)更优了

动态规划

设数组为 a[1..n],定义状态 b[i] 表示以 a[i] 结尾的子段的最大和,则最大字段和为 m a x b j max b_j maxbj

有递归方程:
b [ i ] = { 0 i = 0 ( 边界条件 ) max ⁡ ( b [ i − 1 ] + a [ i ] , a [ i ] ) i ≥ 1 b[i] = \begin{cases} 0 & i = 0 \quad (\text{边界条件}) \\ \max(b[i-1] + a[i],\, a[i]) & i \ge 1 \end{cases} b[i]={0max(b[i1]+a[i],a[i])i=0(边界条件)i1
全局最大子段和为所有 b[i] 中的最大值,并与0比较:
MaxSum = max ⁡ ( 0 , max ⁡ 1 ≤ i ≤ n b [ i ] ) \text{MaxSum} = \max\left(0,\, \max_{1 \le i \le n} b[i]\right) MaxSum=max(0,1inmaxb[i])

计算最优值

使用变量b记录此前最大字段和,如果为负数则当前最大和为a[i],如果为正数则最大和为b+a[i]
代码

int maxSubArray4(int a[], int n) {int b = 0;int maxsum = 0;for (int i = 0; i < n; i++) {if (b > 0)b += a[i];else b = a[i];if (b > maxsum)maxsum = b;}return maxsum;
}

构造最优解

使用两个变量startend记录最大字段的起始和结束位置

int maxSubArray4(int a[], int n, int* start, int* end) {int b = 0;int max_sum = 0;int current_start = 0;  // 当前子段起始位置*start = *end = -1;     // 默认无效索引for (int i = 0; i < n; i++) {if (b > 0) {b += a[i];}else {b = a[i];current_start = i;  // 重置起点}// 更新全局最大值及索引if (b > max_sum) {max_sum = b;*start = current_start;*end = i;}}// 处理全负数情况:返回0且不记录索引if (max_sum <= 0) {*start = *end = -1;return 0;}return max_sum;
}

时间负责度:O(n)

实例

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
//穷举法
int maxSubArray(int a[], int n) {int maxsum = 0;for (int i = 0; i < n; i++) {//开始位置for (int j = i; j < n; j++) {//结束位置int nowsum = 0;for (int k = i; k <= j; k++) {nowsum += a[k];if (nowsum > maxsum)maxsum = nowsum;}}}return maxsum;
}
//穷举法优化
int maxSubArray2(int a[], int n) {int maxsum = 0;for (int i = 0; i < n; i++) {//开始位置int nowsum = 0;for (int j = i; j < n; j++) {//结束位置nowsum += a[j];if (nowsum > maxsum)maxsum = nowsum;}}return maxsum;
}
//分治法
int maxSubArray3(int a[], int left, int right) {if (left == right)return a[left];int mid = (left + right) / 2;int maxleft = maxSubArray3(a, left, mid);int maxright = maxSubArray3(a, mid + 1, right);int maxleftsum = 0, maxrightsum = 0;int nowsum = 0;for (int i = mid; i >= left; i--) {nowsum += a[i];if (nowsum > maxleftsum)maxleftsum = nowsum;}nowsum = 0;for (int i = mid + 1; i <= right; i++) {nowsum += a[i];if (nowsum > maxrightsum) {maxrightsum = nowsum;}}return max(maxleft, max(maxright, maxleftsum + maxrightsum));
}
//动态规划
int maxSubArray4(int a[], int n, int* start, int* end) {int b = 0;int max_sum = 0;int current_start = 0;  // 当前子段起始位置*start = *end = -1;     // 默认无效索引for (int i = 0; i < n; i++) {if (b > 0) {b += a[i];}else {b = a[i];current_start = i;  // 重置起点}// 更新全局最大值及索引if (b > max_sum) {max_sum = b;*start = current_start;*end = i;}}// 处理全负数情况:返回0且不记录索引if (max_sum <= 0) {*start = *end = -1;return 0;}return max_sum;
}
int main() {int a[] = { 1, -2, 3, 10, -4, 7, 2, -5 };cout << maxSubArray(a, 8) << endl;cout << maxSubArray2(a, 8) << endl;cout << maxSubArray3(a, 0, 7) << endl;int start, end;cout << maxSubArray4(a, 8, &start, &end) << endl;cout <<"start:" << start << " " <<"end:"<< end << endl;return 0;
}

运行结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/73459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何理解三极管截至区、放大区、饱和区

一、 三极管符号&#xff1a; NPN : PNP: 二、Vce、与Ic曲线图 1、截至区&#xff1a;ib很小的时候就是截至区。因为Ib很小的时候等价于Ub很小&#xff0c;Ub如果不足以达到0.7V PN结就不会导通&#xff0c;所以三极管就…

DeepSeek Smallpond 在火山引擎 AI 数据湖的探索实践

资料来源&#xff1a;火山引擎-开发者社区 DeepSeek Smallpond 介绍 Smallpond 是一套由 DeepSeek 推出的 、针对 AI 领域&#xff0c;基于 Ray 和 DuckDB 实现的轻量级数据处理引擎&#xff0c;具有以下优点&#xff1a; 1.轻量级 2.高性能 3.支持规模大 4.无需运维 5.P…

Linux进程间的通信

进程间通信 1.进程间通信介绍2.匿名命名管道原理操作 1.进程间通信介绍 1.1 进程间通信目的&#xff1a;一个进程需要将他的数据发送给另一个进程&#xff0c;大家应该都多少接触过linux中的管道符"|"&#xff0c;这个符号就是用来多个命令执行&#xff0c;在Linux中…

直播预告 | TDgpt 智能体发布 时序数据库 TDengine 3.3.6 发布会即将开启

从海量监控数据&#xff0c;到工业、能源、交通等场景中实时更新的各类传感器数据&#xff0c;时序数据正在以指数级速度增长。而面对如此庞杂的数据&#xff0c;如何快速分析、自动发现问题、精准预测未来&#xff0c;成为企业数字化转型过程中的关键挑战。 TDengine 的答案是…

智能汽车图像及视频处理方案,支持视频星轨拍摄能力

美摄科技作为智能汽车图像及视频处理领域的先行者&#xff0c;正以革新性的技术引领着行业的未来发展。美摄科技智能汽车图像及视频处理方案&#xff0c;一个集高效性、智能化、画质增强于一体的创新解决方案&#xff0c;旨在重塑智能汽车图像画质的新标准&#xff0c;并支持前…

B站左神算法课学习笔记(P7):图

目录 一、图的存储方式&#xff08;千奇百怪&#xff09; 1&#xff09;邻接表 2&#xff09;邻接矩阵 3&#xff09;其他 4&#xff09;推荐存储方式&#xff08;代码&#xff09; 二、图的遍历 &#xff08;1&#xff09;宽度优先遍历 &#xff08;2&#xff09;深度…

2-1 基本放大电路

放大的概念 mV →V mA→A 特征&#xff1a;放大功率&#xff08;电压与电流&#xff09;。 本质&#xff1a;能量在控制下的转换。&#xff08;外接供电电源&#xff09; 必要条件&#xff1a;有源元件&#xff08;能量控制原件&#xff09; 前提&#xff1a;不失真 测试的…

【附代码】【MILP建模】3D装箱问题(3D-Bin Packing Problem)

文章目录 相关教程相关文献问题描述建模思路——carton 方向平行轴建模方法&#xff08;9变量6约束&#xff09;平行轴建模方法&#xff08;4变量8约束&#xff09;枚举建模方法&#xff08;6变量1约束&#xff09; 建模思路——carton 位置平行轴建模方法枚举建模方法 Bin长宽…

DeepSeek助力文案,智能音箱如何改变你的生活?

你好&#xff0c;我是三桥君 你有没有为写智能音箱的宣传文案而抓耳挠腮过&#xff1f;三桥君在这方面可是有些感想&#xff0c;今天就来给你唠唠怎么用DeepSeek写出超赞的智能音箱宣传文案。 首先&#xff0c;你得给DeepSeek喂足“料”。这就好比做饭&#xff0c;你得准备好各…

【区块链安全 | 第一篇】密码学原理

文章目录 1.哈希函数1.1 哈希函数的性质1.2 常见哈希算法1.3 Merkle Tree&#xff08;默克尔树&#xff09;1.4 HMAC&#xff08;哈希消息认证码&#xff09; 2. 公钥密码学2.1 对称加密 vs 非对称加密2.2 RSA 算法2.3 ECC&#xff08;椭圆曲线密码学&#xff09;2.4 Diffie-He…

基于websocketpp实现的五子棋项目

该博客对于学完C和linux操作系统&#xff0c;但不知道如何用C开发项目&#xff0c;已经不知道C如何使用第三方库的人来说一定很有帮助&#xff0c;请耐心看完&#xff01; 先看一下游戏会显示的前端界面&#xff0c;对理解这个游戏的前后端交互过程会有帮助 1. 开发环境 1.1 …

LabVIEW 与 PLC 通讯的常见方式

在工业自动化和数据采集系统中&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09; 广泛用于控制和监测各种设备&#xff0c;而 LabVIEW 作为强大的图形化编程工具&#xff0c;常用于上位机数据处理和可视化。为了实现 LabVIEW 与 PLC 的高效通讯&#xff0c;常见的方法包…

2025 polarctf春季个人挑战赛web方向wp

来个弹窗 先用最基础的xss弹窗试一下 <script>alert("xss")</script>没有内容&#xff0c;猜测过滤了script&#xff0c;双写绕过一下 <scrscriptipt>alert("xss")</scscriptript>background 查看网页源代码 查看一下js文件 类…

【Ai】--- 可视化 DeepSeek-r1 接入 Open WebUI(超详细)

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【Ai】--- 可视化 DeepSeek-r1 接入 Open WebUI(超详细) 开发环境一、前情提要:你…

Redis--redis客户端

目录 一、引言 二、数据库管理命令 三、redis客户端 四、Java客户端使用Redis 五、相关命令使用 1.get&#xff0c;set 2.exists&#xff0c;del 3.keys 4.expire&#xff0c;ttl 六、总结 一、引言 在之前学了redis相关类型命令之后&#xff0c;本篇文章&#xff0c;…

SpringBoot3.0不建议使用spring.factories,使用AutoConfiguration.imports新的自动配置方案

文章目录 一、写在前面二、使用imports文件1、使用2、示例比对3、完整示例 参考资料 一、写在前面 spring.factories是一个位于META-INF/目录下的配置文件&#xff0c;它基于Java的SPI(Service Provider Interface)机制的变种实现。 这个文件的主要功能是允许开发者声明接口的…

鸿蒙特效教程10-卡片展开/收起效果

鸿蒙特效教程10-卡片展开/收起效果 在移动应用开发中&#xff0c;卡片是一种常见且实用的UI元素&#xff0c;能够将信息以紧凑且易于理解的方式呈现给用户。 本教程将详细讲解如何在HarmonyOS中实现卡片的展开/收起效果&#xff0c;通过这个实例&#xff0c;你将掌握ArkUI中状…

hn航空app hnairSign unidbg 整合Springboot

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 学习unidbg补环境。先弄一个…

奇怪的异形选项卡样式、弧形边框选项卡

<template><div :class"$options.name"><div class"tab">默认选项卡</div><div class"tab" active>选中选项卡</div><el-divider /><el-tabs v-model"tabActiveName" tab-click"(t…

特殊行车记录仪DAT视频丢失的恢复方法

行车记录仪是一种常见的车载记录仪&#xff0c;和常见的“小巧玲珑”的行车记录仪不同&#xff0c;一些特种车辆使用的记录仪的外观可以用“笨重”来形容。下边我们来看看特种车载行车记录仪删除文件后的恢复方法。 故障存储: 120GB存储设备/文件系统:exFAT /簇大小:128KB 故…