<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>prefix max &#8211; Huahua&#8217;s Tech Road</title>
	<atom:link href="https://zxi.mytechroad.com/blog/tag/prefix-max/feed/" rel="self" type="application/rss+xml" />
	<link>https://zxi.mytechroad.com/blog</link>
	<description></description>
	<lastBuildDate>Fri, 11 Apr 2025 15:50:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.2</generator>

<image>
	<url>https://zxi.mytechroad.com/blog/wp-content/uploads/2017/09/cropped-photo-32x32.jpg</url>
	<title>prefix max &#8211; Huahua&#8217;s Tech Road</title>
	<link>https://zxi.mytechroad.com/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>花花酱 LeetCode 2016. Maximum Difference Between Increasing Elements</title>
		<link>https://zxi.mytechroad.com/blog/algorithms/array/leetcode-2016-maximum-difference-between-increasing-elements/</link>
					<comments>https://zxi.mytechroad.com/blog/algorithms/array/leetcode-2016-maximum-difference-between-increasing-elements/#respond</comments>
		
		<dc:creator><![CDATA[zxi]]></dc:creator>
		<pubDate>Fri, 11 Apr 2025 15:44:23 +0000</pubDate>
				<category><![CDATA[Array]]></category>
		<category><![CDATA[prefix max]]></category>
		<guid isPermaLink="false">https://zxi.mytechroad.com/blog/?p=10332</guid>

					<description><![CDATA[数据规模 n &#60;= 1000。O(n2) 的算法也是能过的。 方法1: Brute Force 双重循环枚举所有的(nums[i], nums[j])的组合。 时间复杂度：O(n2)空间复杂度：O(1) [crayon-67f9f680690bd851942449/] 方法2: 空间换时间 使用prefix sum算法，预先计算num[i] ~ nums[n-1]的最大值，存储在right[i]中。 时间复杂度：O(n)空间复杂度：O(n) [crayon-67f9f680690cc352117888/] 方法3: Running Min 从左到右遍历，记录当前为止出现过最小的值。比较 nums[i]&#8230;]]></description>
										<content:encoded><![CDATA[
<p>数据规模 n &lt;= 1000。O(n<sup>2</sup>) 的算法也是能过的。</p>



<p>方法1: Brute Force</p>



<p>双重循环枚举所有的(nums[i], nums[j])的组合。</p>



<p>时间复杂度：O(n<sup>2</sup>)<br>空间复杂度：O(1)</p>



<pre class="urvanov-syntax-highlighter-plain-tag">class Solution {
public:
  int maximumDifference(vector&lt;int&gt;&amp; nums) {
    const int n = nums.size();
    int ans = 0;
    for (int i = 0; i &lt; n; ++i)
      for (int j = i + 1; j &lt; n; ++j)
        ans = max(ans, nums[j] - nums[i]);
    return ans ? ans : -1;
  }
};</pre>



<p>方法2: 空间换时间</p>



<p>使用prefix sum算法，预先计算num[i] ~ nums[n-1]的最大值，存储在right[i]中。</p>



<p>时间复杂度：O(n)<br>空间复杂度：O(n)</p>



<pre class="urvanov-syntax-highlighter-plain-tag">class Solution {
public:
  int maximumDifference(vector&lt;int&gt;&amp; nums) {
    const int n = nums.size();
    int ans = 0;
    vector&lt;int&gt; right(n, nums.back());
    for (int i = n - 2; i &gt;= 0; --i)
      right[i] = max(right[i + 1], nums[i]);
    for (int i = 0; i &lt; n; ++i)
      ans = max(ans, right[i] - nums[i]);
    return ans ? ans : -1;
  }
};</pre>



<p>方法3: Running Min</p>



<p>从左到右遍历，记录当前为止出现过最小的值。比较 nums[i] &#8211; 最小值 和 最优解。</p>



<p>时间复杂度：O(n)<br>空间复杂度：O(1)</p>



<pre class="urvanov-syntax-highlighter-plain-tag">class Solution {
public:
  int maximumDifference(vector&lt;int&gt;&amp; nums) {
    const int n = nums.size();
    int ans = 0;
    int smallest = nums[0];
    for (int i = 1; i &lt; n; ++i) {
      ans = max(ans, nums[i] - smallest);
      smallest = min(smallest, nums[i]);
    }
    return ans ? ans : -1;
  }
};</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://zxi.mytechroad.com/blog/algorithms/array/leetcode-2016-maximum-difference-between-increasing-elements/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>花花酱 LeetCode 2012. Sum of Beauty in the Array</title>
		<link>https://zxi.mytechroad.com/blog/algorithms/array/leetcode-2012-sum-of-beauty-in-the-array/</link>
					<comments>https://zxi.mytechroad.com/blog/algorithms/array/leetcode-2012-sum-of-beauty-in-the-array/#respond</comments>
		
		<dc:creator><![CDATA[zxi]]></dc:creator>
		<pubDate>Fri, 11 Apr 2025 04:21:38 +0000</pubDate>
				<category><![CDATA[Array]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[medium]]></category>
		<category><![CDATA[prefix]]></category>
		<category><![CDATA[prefix max]]></category>
		<guid isPermaLink="false">https://zxi.mytechroad.com/blog/?p=10326</guid>

					<description><![CDATA[数据规模比较大，算法必须是O(n)的。 可以预先使用O(n)时间计算nums[0] .. nums[i]的最大值，存在left[i]中，以及nums[i] .. nums[n-1]的最小值存在right[i]中。然后再按题目的定义计算即可。 时间复杂度：O(n)空间复杂度：O(n) [crayon-67f9f6806968f627425625/]]]></description>
										<content:encoded><![CDATA[
<p>数据规模比较大，算法必须是O(n)的。</p>



<p>可以预先使用O(n)时间计算nums[0] .. nums[i]的最大值，存在left[i]中，以及nums[i] .. nums[n-1]的最小值存在right[i]中。然后再按题目的定义计算即可。</p>



<p>时间复杂度：O(n)<br>空间复杂度：O(n)</p>



<pre class="urvanov-syntax-highlighter-plain-tag">class Solution {
public:
  int sumOfBeauties(vector&lt;int&gt;&amp; nums) {
    const int n = nums.size();
    vector&lt;int&gt; left(n, nums[0]);
    vector&lt;int&gt; right(n, nums.back());
    for (int i = 1; i &lt; n; ++i)
      left[i] = max(left[i - 1], nums[i]);
    for (int i = n - 2; i &gt;= 0; --i)
      right[i] = min(right[i + 1], nums[i]);
    int ans = 0;
    for (int i = 1; i &lt; n - 1; ++i)
      if (left[i - 1] &lt; nums[i] &amp;&amp; nums[i] &lt; right[i + 1])
        ans += 2;
      else if (nums[i - 1] &lt; nums[i] &amp;&amp; nums[i] &lt; nums[i + 1])
        ans += 1;
    return ans;
  }
};</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://zxi.mytechroad.com/blog/algorithms/array/leetcode-2012-sum-of-beauty-in-the-array/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
