053 - Maximum Subarray

2023-12-11 11:59
文章标签 maximum subarray 053

本文主要是介绍053 - Maximum Subarray,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [−2,1,−3,4,−1,2,1,−5,4],
the contiguous subarray [4,−1,2,1] has the largest sum = 6.

click to show more practice.

More practice:

If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.



int domerge(int *nums, int *nsize)
{int kk = 0, k = *nsize, i;if (nums[0] < 0) kk++;for (i = kk+1; i <= k; i++) {if (nums[i] < 0) {if (i == k) break;if (nums[i] + nums[kk] >= 0 && nums[i] + nums[i + 1] >= 0) {nums[kk] += nums[i] + nums[i + 1];i++;	} else {nums[++kk] = nums[i];}} else {if (nums[kk] >= 0)nums[kk] += nums[i];else nums[++kk] = nums[i];}}if (kk == *nsize) return 0;*nsize = kk;return 1;
}int listmax(int *nums, int numsSize)
{if (numsSize < 1) return 0;if (numsSize == 1) return nums[0];if (nums[0] <= 0) return nums[0] + listmax(nums + 1, numsSize - 1);int nextgt0 = listmax(nums + 2, numsSize - 2);if (nums[1] + nextgt0 >= 0)return nums[0] + nums[1] + nextgt0;elsereturn nums[0];
}
int maxSubArray(int *nums, int numsSize)
{int max = INT_MIN;int i, k = 0;if (!numsSize) return 0;/* merge +/- */for( i = 0 ; i < numsSize ; i++ ) {if (nums[i] > max) max = nums[i];if (!i || !nums[i]) continue;if (nums[i] >= 0) {if (nums[k] >= 0) nums[k] += nums[i];else nums[++k] = nums[i];} else {if (nums[k] > 0) nums[++k] = nums[i];else nums[k] += nums[i];}}if (k == 0) return nums[k] <= 0? max:nums[k];/* merge +a -b +c --> a+b>=0 && b+c>=0 */while (domerge(nums, &k));max = INT_MIN;int left = 0, right = k, sum;while (left <= right) {if (nums[left] <= 0) {left++;continue;}sum = listmax(nums + left, k+1-left);if (sum > max) max = sum;left++;}return max;
}


这篇关于053 - Maximum Subarray的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/480601

相关文章

leetcode#628. Maximum Product of Three Numbers

题目 Given an integer array, find three numbers whose product is maximum and output the maximum product. Example 1: Input: [1,2,3]Output: 6 Example 2: Input: [1,2,3,4]Output: 24 Note: The lengt

Maximum likelihood function maximizes what thing?

最大似然函数(Maximum Likelihood Function)最大化的是数据在给定参数下出现的概率。具体来说,它最大化的是似然函数(Likelihood Function),即给定参数 ( \theta ) 下观测数据的概率。在统计学中,似然函数 ( L(\theta) ) 通常定义为所有独立观测数据点概率的乘积,对于参数 ( \theta ) 的函数。 对于一组独立同分布的观测数据

ORA-24067: exceeded maximum number of subscribers for queue ADMIN.SMS_MT_QUEUE

临时处理办法: delete from aq$_ss_MT_tab_D;delete from aq$_ss_MT_tab_g;delete from aq$_ss_MT_tab_h;delete from aq$_ss_MT_tab_i;delete from aq$_ss_MT_tab_p;delete from aq$_ss_MT_tab_s;delete from aq$

[LeetCode] 239. Sliding Window Maximum

题:https://leetcode.com/problems/sliding-window-maximum/description/ 题目 Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You

vue3 el-menu 菜单Maximum recursive updates exceeded 报错

vue3 用el-menu实现管理后台左侧菜单,报Uncaught (in promise) Maximum recursive updates exceeded in component <ElMenu>. This means you have a reactive effect that is mutating its own dependencies and thus recursivel

浙大数据结构:01-复杂度2 Maximum Subsequence Sum

数据结构MOOC PTA习题 01-复杂度2 Maximum Subsequence Sum #include <iostream>using namespace std;const int M = 100005;int a[M];int main(){int k;cin >> k;int f = 1;for (int i = 0; i < k; i++){cin >> a[i

Maximum Index

Given an array arr[], find the maximum j – i such that arr[j] > arr[i] Given an array arr[], find the maximum j – i such that arr[j] > arr[i]. Examples: Input: {34, 8, 10, 3, 2, 80, 30, 33, 1}O

Maximum Number in Mountain Sequence

Given a mountain sequence of n integers which increase firstly and then decrease, find the mountain top. Example Example 1: Input: nums = [1, 2, 4, 8, 6, 3] Output: 8 Example 2: Input: nums = [

Maximum Depth of N-ary Tree

Input: root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]Output: 5 思路1:DFS ,divide and conquer /*// Definition for a Node.class Node {public int v

Subarray Sum Equals K

Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k. Example 1: Input:nums = [1,1,1], k = 2Output: 2 思路:用prefixsum prefixsu