JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2026-02-25
目录

1911. 最大交替子序列和Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

一个下标从 0 开始的数组的 交替和 定义为 偶数 下标处元素之 和 减去 奇数 下标处元素之 和 。

  • 比方说,数组 [4,2,5,3] 的交替和为 (4 + 5) - (2 + 3) = 4 。 给你一个数组 nums ,请你返回 nums 中任意子序列的 最大交替和 (子序列的下标 重新 从 0 开始编号)。

一个数组的 子序列 是从原数组中删除一些元素后(也可能一个也不删除)剩余元素不改变顺序组成的数组。比方说,[2,7,4] 是 [4,2,3,7,2,1,4] 的一个子序列(加粗元素),但是 [2,4,2] 不是。

示例 1:

输入:nums = [4,2,5,3]
输出:7
解释:最优子序列为 [4,2,5] ,交替和为 (4 + 5) - 2 = 7 。

示例 2:

输入:nums = [5,6,7,8]
输出:8
解释:最优子序列为 [8] ,交替和为 8 。

示例 3:

输入:nums = [6,2,1,2,4,5]
输出:10
解释:最优子序列为 [6,1,5] ,交替和为 (6 + 5) - 1 = 10 。

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 105

# 思路

先卖后买的卖股票

# 解法

class Solution {
    public long maxAlternatingSum(int[] nums) {
        int length = nums.length;
        long[] dp = new long[2];
//        dp[0]表示持有股票  dp[1]表示不持有股票
//        可以理解为初始我们身上就有一张价值nums[0]的股票
//        dp[0]表示这张股票我们没有卖出去,还放在身上,所以资金为0
//        dp[1]表示这张股票卖了出去,所以我们身上有这张股票卖出去的钱
        dp[1] = nums[0];
        dp[0] = 0;
        for (int i = 1; i < length; i++) {
//            持有股票有两种可能,前一天也持有,也可能前一天不持有,二者取最大值
//            前一天不持有的话,今天持有,就需要付出今天股票的价格来购买今天的股票
            dp[0] = Math.max(dp[0], dp[1] - nums[i]);
//            同理
            dp[1] = Math.max(dp[1], dp[0] + nums[i]);
        }
//        最后一定是不持有股票,将股票卖出去后身上所剩下的钱最多
        return dp[1];
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
#Java
最近更新
01
1644.测试路径 Java
02-25
02
1888. 使二进制字符串字符交替的最少反转次数 Java
02-25
03
1890. 2020年最后一次登录 Java
02-25
更多文章>
Theme by Vdoing | Copyright © 2019-2026 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式