首页 > 编程语言 >leetcode——令牌放置(java)

leetcode——令牌放置(java)

时间:2025-01-18 09:33:40浏览次数:3  
标签:分数 令牌 java power tokens 100 能量 leetcode

你的初始 能量power,初始 分数0,只有一包令牌以整数数组 tokens 给出。其中 tokens[i] 是第 i 个令牌的值(下标从 0 开始)。

你的目标是通过有策略地使用这些令牌以 最大化分数。在一次行动中,你可以用两种方式中的一种来使用一个 未被使用的 令牌(但不是对同一个令牌使用两种方式):

  • 朝上:如果你当前 至少tokens[i]能量 ,可以使用令牌 i ,失去 tokens[i]能量 ,并得到 1

  • 朝下:如果你当前至少有 1 ,可以使用令牌 i ,获得 tokens[i]能量 ,并失去 1

在使用 任意 数量的令牌后,返回我们可以得到的最大 分数

示例 1:

输入:tokens = [100], power = 50
输出:0
解释:因为你的初始分数为 0,无法使令牌朝下。你也不能使令牌朝上因为你的能量(50)比 tokens[0] 少(100)。

示例 2:

输入:tokens = [200,100], power = 150
输出:1
解释:使令牌 1 正面朝上,能量变为 50,分数变为 1 。
不必使用令牌 0,因为你无法使用它来提高分数。可得到的最大分数是 1。

示例 3:

输入:tokens = [100,200,300,400], power = 200
输出:2
解释:按下面顺序使用令牌可以得到 2 分:
1. 令牌 0 (100)正面朝上,能量变为 100 ,分数变为 1
2. 令牌 3 (400)正面朝下,能量变为 500 ,分数变为 0
3. 令牌 1 (200)正面朝上,能量变为 300 ,分数变为 1
4. 令牌 2 (300)正面朝上,能量变为 0 ,分数变为 2
​
可得的最大分数是 2。

解题方法:(排序+贪心+双指针)

1.这道题刚开始看无从下手,但是由于题目中涉及到数的和的问题,所以我们首先对数组进行排序,这样子我们就可以直到我们可以使用贪心加双指针来进行解题。

2.设定好左右双指针之后,开始遍历数组,当我们的power大于当前的tokens[i]时,我们最好的选择便是消耗能量来进行加分。

3.当我们的power不够消耗时,我们直接使用朝下来加能量直到够消耗为止。

class Solution {
    public int bagOfTokensScore(int[] tokens, int power) {
        Arrays.sort(tokens);
        int ans = 0;
        int n = tokens.length;
        int i = 0, j = n - 1;
        while (i <= j && power >= tokens[i]) {
            while (i <= j && power >= tokens[i]) {
                power -= tokens[i++];
                ans++;
            }
            if (i < j) {
                power += tokens[j--];
                ans--;
            }
        }
        return ans;
    }
}

标签:分数,令牌,java,power,tokens,100,能量,leetcode
From: https://blog.csdn.net/W_L_MM/article/details/145219993

相关文章

  • java集合
    集合想一下,目前为止,我们学过哪些可以存储元素的容器:1、数组,查询快,增删慢。既可以存储基本数据类型的元素,又可以存储引用数据类型的元素对于同一个数组而言,元素类型都是一样长度一旦创建旧固定了,不能改变长度。2、StringBuffer长度可以随着添加的字符个数而改变StringBuffe......
  • java常用类
    java常用类Api概述API(ApplicationProgrammingInterface)应用程序编程接口编写一个机器人程序去控制机器人踢足球,程序就需要向机器人发出向前跑、向后跑、射门、抢球等各种命令,没有编过程序的人很难想象这样的程序如何编写。但是对于有经验的开发人员来说,知道机器人厂商一......
  • Java基础学习(八)
    Java基础学习(八):字符串目录Java基础学习(八):字符串概述字符串的创建字符串内存分析String类常用方法StringBuilder类StringJoiner类字符串相关类底层原理本文为个人学习记录,内容学习自黑马程序员概述java.lang包是Java的核心包,其下的类都是无需手动导入即可使用的java.......
  • 《offer 来了:Java 面试核心知识点精讲 -- 原理篇》
    在Java面试的战场上,只知皮毛可不行,面试官们越来越看重对原理的理解。今天就给大家分享一本能让你在面试中脱颖而出的“武林秘籍”——《offer来了:Java面试核心知识点精讲--原理篇》。本书详细介绍了Java架构师在BAT和移动互联网公司面试中常被问及的核心知识,内容详细......
  • Java数组详解
    目录一、什么是数组二、声明和创建1、数组的声明2、数组的创建三、数组的初始化1.静态初始化(StaticInitialization)2.动态初始化(DynamicInitialization)3.默认初始化(DefaultInitialization)四、数组的基本使用1、访问元素2、数组长度3、遍历数组五、数组下......
  • 【华为OD-E卷 - 数组连续和 100分(python、java、c++、js、c)】
    【华为OD-E卷-数组连续和100分(python、java、c++、js、c)】题目给定一个含有N个正整数的数组,求出有多少个连续区间(包括单个正整数),它们的和大于等于x输入描述第一行两个整数Nx(0<N<=100000,0<=x<=10000000)第二行有N个正整数(每个正整数小于等于100)输出......
  • 2025高级java面试精华及复习方向总结
    1. Java基础顶顶顶顶的点点滴滴1.1java集合关系结构图 1.2 如何保证ArrayList的线程安全方法一:使用Collections工具类中的synchronizedList方法    List<String>synchronizedList=Collections.synchronizedList(newArrayList<>());使用锁机制     ......
  • 免费送源码:Java+ssm+MySQL 基于SSM的游戏论坛设计与实现 计算机毕业设计原创定制
     摘 要本论文主要论述了如何使用SSM框架开发一个游戏论坛,将严格按照软件开发流程进行各个阶段的工作,采用B/S架构JAVA技术,面向对象编程思想进行项目开发。在引言中,作者将论述游戏论坛的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计......
  • 免费送源码:Java+ssm+MySQL 基于ssm校园商城系统小程序 计算机毕业设计原创定制
    摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,校园商城系统小程序被用户普遍使用,为方便用户能够可以随时进行校园商城系统小程序的数据信息管理,特开发了基于ssm校园商......
  • 免费送源码:Java+ssm+MySQL Springboot大学生心理健康咨询小程序 计算机毕业设计原创定
    摘 要科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规则和开发步骤,采用java技术建设大学......