LeetCode-1423:可获得的最大点数
题目描述:
几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。
每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。
你的点数就是你拿到手中的所有卡牌的点数之和。
给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。
示例 1:
输入:cardPoints = [1,2,3,4,5,6,1], k = 3
 输出:12
 解释:第一次行动,不管拿哪张牌,你的点数总是 1 。但是,先拿最右边的卡牌将会最大化你的可获得点数。最优策略是拿右边的三张牌,最终点数为 1 + 6 + 5 = 12 。
 示例 2:
输入:cardPoints = [2,2,2], k = 2
 输出:4
 解释:无论你拿起哪两张卡牌,可获得的点数总是 4 。
思路分析:
记数组 cardPoints 的长度为 n,由于只能从开头和末尾拿 k 张卡牌,所以最后剩下的必然是连续的 n−k 张卡牌。
我们可以通过求出剩余卡牌点数之和的最小值,来求出拿走卡牌点数之和的最大值。
算法
由于剩余卡牌是连续的,使用一个固定长度为 n−k 的滑动窗口对数组cardPoints 进行遍历,求出滑动窗口最小值,然后用所有卡牌的点数之和减去该最小值,即得到了拿走卡牌点数之和的最大值。
  
   - 
    
     
    
    
     
      class Solution {
     
    
 
   - 
    
     
    
    
         public int maxScore(int[] cardPoints, int k) {
     
    
 
   - 
    
     
    
    
             int len=cardPoints.length;
     
    
 
   - 
    
     
    
    
             int sum=0;
     
    
 
   - 
    
     
    
    
         
     
    
 
   - 
    
     
    
    
             int widowSize=len-k;
     
    
 
   - 
    
     
    
    
             for(int i=0;i<widowSize;i++){
     
    
 
   - 
    
     
    
    
     
                  sum+=cardPoints[i];
     
    
 
   - 
    
     
    
    
     
              }
     
    
 
   - 
    
     
    
    
             int minSum=sum;
     
    
 
   - 
    
     
    
    
             for(int i=widowSize;i<len;i++){
     
    
 
   - 
    
     
    
    
     
                  sum=sum+cardPoints[i]-cardPoints[i-widowSize];
     
    
 
   - 
    
     
    
    
     
                  minSum=Math.min(minSum,sum);
     
    
 
   - 
    
     
    
    
     
              }
     
    
 
   - 
    
     
    
    
             return Arrays.stream(cardPoints).sum() - minSum;
     
    
 
   - 
    
     
    
    
     
          }
     
    
 
   - 
    
     
    
    
     
      }
     
    
 
  
 
文章来源: blog.csdn.net,作者:小小谢先生,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/xiewenrui1996/article/details/113731248
- 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)