• 力扣 1423 :可获得的最大点数


    题目描述:

      几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。

      每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。

      你的点数就是你拿到手中的所有卡牌的点数之和。

      给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。

    示例:

      输入:cardPoints=[2,2,2] , k=2

      输出:4

      解释:无论你拿起哪两张卡牌,可获得的点数总是4

      输入:cardPoints=[9,7,7,9,7,7,9] , k=7

      输出:55

      解释:你必须拿起所有卡牌,可以获得的点数为所有卡牌的点数之和

      输入:cardPoints=[1,79,80,1,1,1,200,1] , k=3

      输出:202

      解释:

     

    综合解法(JS实现):

      解法一(普通大众解法):

    var cards=[4,6,8,,2,4,5,9];  //数字卡
    var pickCards=3;    //要拿的卡数
    var pickCardsMaxSum=0; //拿到的卡数的最大值
    
    for(let i=0; i<pickCards; i++){
        if(cards[0] >= cards[cards.length-1]){
             pickCardsMaxSum+=cards[0]  ;
             cards.shift();
        }else{
             pickCardsMaxSum+=cards[cards.length-1];
             cards.pop();
        }
    }        
    
    console.log('输出拿到卡数的最大值:',pickCardsMaxSum);

       解法二(滑动窗口解法):

    //思想是:所有数字之和-最小的滑动窗口值和=最大值和
    var cards=[9,7,7,9,7,7,9]; //所有的数字卡
    var allCardsSum=0;  //所有卡的数字和
    var pickCards=7;    //拿的卡数
    var windowMinSum=0;   //移动窗口的最小值
    var windowSize=cards.length-pickCards; //移动窗口的大小
    var sum=0;   //移动窗口的值
    
    //得到所有的数字卡和
    for(let i=0;i<cards.length;i++){
        allCardsSum+=cards[i];
    }
    
    //初始化窗口的最小和值
    for(let i=0;i<windowSize;i++){
        windowMinSum+=cards[i];
    }
    sum=windowMinSum;
    for(let s=windowSize;s<cards.length;s++){
        sum+=cards[s]-cards[s-windowSize];
        windowMinSum=Math.min(sum,windowMinSum);  
    }
    var res=allCardsSum-windowMinSum;
    console.log('得到的最大和值‘,res); 
    总结:上面解法没有考虑到某些情况,因为相对于滑动窗口的解题思想来说我其余的情况没有诱惑力;
       刷题不在于多少在于你吸收了多少,刚开始入手慢随着积累慢慢的就可以提速了;
       一步一个脚印!!!继续加油

    版权声明:本文为博主原创文章,如需转载,请标明出处。
  • 相关阅读:
    SSM框架整合(Spring+SrpingMVC+Mybatis) 简单案例
    SpringDataRedis操作Redis简单案例
    SpringMVC总结四:拦截器简单介绍
    Configure a bridge interface over a VLAN tagged bonded interface
    Create a bridge using a tagged vlan (8021.q) interface
    Configure a VLAN (on top of a bond) with NetworkManager (nmcli) in RHEL7
    Configure bridge on a team interface using NetworkManager in RHEL 7
    Configure a bridged network interface for KVM using RHEL 5.4 or later?
    程序员的成长阶梯和级别定义
    <程序员从入门到精通> -- How
  • 原文地址:https://www.cnblogs.com/gamecc666/p/14582955.html
Copyright © 2020-2023  润新知