首页 > 编程语言 >#yyds干货盘点# LeetCode程序员面试金典:移除盒子

#yyds干货盘点# LeetCode程序员面试金典:移除盒子

时间:2024-01-14 23:01:11浏览次数:28  
标签:yyds 盒子 int 金典 length boxes calculatePoints 移除 dp

题目

给出一些不同颜色的盒子 boxes ,盒子的颜色由不同的正数表示。


你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止。每一轮你可以移除具有相同颜色的连续 k 个盒子(k >= 1),这样一轮之后你将得到 k * k 个积分。


返回 你能获得的最大积分和 。


 


示例 1:


输入:boxes = [1,3,2,2,2,3,4,3,1]

输出:23

解释:

[1, 3, 2, 2, 2, 3, 4, 3, 1]  

----> [1, 3, 3, 4, 3, 1] (3*3=9 分)  

----> [1, 3, 3, 3, 1] (1*1=1 分)  

----> [1, 1] (3*3=9 分)  

----> [] (2*2=4 分)

示例 2:


输入:boxes = [1,1,1]

输出:9

示例 3:


输入:boxes = [1]

输出:1

 

代码实现


class Solution {
    int[][][] dp;

    public int removeBoxes(int[] boxes) {
        int length = boxes.length;
        dp = new int[length][length][length];
        return calculatePoints(boxes, 0, length - 1, 0);
    }

    public int calculatePoints(int[] boxes, int l, int r, int k) {
        if (l > r) {
            return 0;
        }
        if (dp[l][r][k] == 0) {
            dp[l][r][k] = calculatePoints(boxes, l, r - 1, 0) + (k + 1) * (k + 1);
            for (int i = l; i < r; i++) {
                if (boxes[i] == boxes[r]) {
                    dp[l][r][k] = Math.max(dp[l][r][k], calculatePoints(boxes, l, i, k + 1) + calculatePoints(boxes, i + 1, r - 1, 0));
                }
            }
        }
        return dp[l][r][k];
    }
}


标签:yyds,盒子,int,金典,length,boxes,calculatePoints,移除,dp
From: https://blog.51cto.com/u_15488507/9242779

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:整数替换
    题目给定一个正整数n,你可以做如下操作:如果n是偶数,则用n/2替换n。如果n是奇数,则可以用n+1或n-1替换n。返回n变为1所需的最小替换次数。 示例1:输入:n=8输出:3解释:8->4->2->1示例2:输入:n=7输出:4解释:7->8->4->2->1或7->6-......
  • 吴师兄学算法day06 双指针 27. 移除元素
    题目:27. 移除元素易错点:差点猛住了,可以用pass顺着逻辑来识别代码示例:classSolution:defremoveElement(self,nums:List[int],val:int)->int:slow=0forfastinrange(len(nums)):ifnums[fast]==val:#删除......
  • [刷题班] LeetCode27. 移除元素
    题目描述思路:快慢指针slow指针:其前面都是数值不等于val的元素。fast指针:用于遍历。方法一:classSolution{publicintremoveElement(int[]nums,intval){intslow=0,fast=0;for(;fast<nums.length;fast++){if(nums[fas......
  • # yyds干货盘点 # 盘点一个AI解答疑难代码的问题
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas代码解读的问题,问题如下:df_in=df[df['入/出'].eq('入')],我也不懂eq啥意思?感觉这代码还可以写成df[df['入/出']=='入'],这两段一个意思吧。答:eq就是=,就是你说的这个。二、实现过程后来【论草莓如......
  • #yyds干货盘点# LeetCode程序员面试金典:旋转函数
    题目给定一个长度为n的整数数组nums。假设arrk是数组nums顺时针旋转k个位置后的数组,我们定义nums的旋转函数 F为:F(k)=0*arrk[0]+1*arrk[1]+...+(n-1)*arrk[n-1]返回F(0),F(1),...,F(n-1)中的最大值。生成的测试用例让答案符合32位......
  • #yyds干货盘点# LeetCode程序员面试金典:二叉树的直径
    题目给你一棵二叉树的根节点,返回该树的直径。二叉树的直径是指树中任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点root。两节点之间路径的长度由它们之间边数表示。 示例1:输入:root=[1,2,3,4,5]输出:3解释:3,取路径[4,2,1,3]或[5,2,1,......
  • # yyds干货盘点 # 盘点一个Python自动化办公实战案例的问题
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas日期数据生成的问题,问题如下:大佬们,有个难度高的新需求,现实生活中也蛮实用的,原始数据和想要的结果是下面这样子,先进先出这样子的表现形式如下:当然商品不会只有一种,有办法吗?下面是他的原始代码:data=[......
  • #yyds干货盘点# LeetCode程序员面试金典:至少有 K 个重复字符的最长子串
    题目给你一个字符串s和一个整数k,请你找出s中的最长子串,要求该子串中的每一字符出现次数都不少于k。返回这一子串的长度。如果不存在这样的子字符串,则返回0。 示例1:输入:s="aaabb",k=3输出:3解释:最长子串为"aaa",其中'a'重复了3次。示例2:输入:s="aba......
  • #yyds干货盘点# LeetCode程序员面试金典:01 矩阵
    题目给定一个由0和1组成的矩阵mat,请输出一个大小相同的矩阵,其中每一个格子是mat中对应位置元素到最近的0的距离。两个相邻元素间的距离为1。 示例1:输入:mat=[[0,0,0],[0,1,0],[0,0,0]]输出:[[0,0,0],[0,1,0],[0,0,0]]示例2:输入:mat=[[0,0,0],[0,1,0],[1,1,......
  • # yyds干货盘点 # pandas单独设一个新列,譬如从2023-11-1到2023-11-31怎么搞法?
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas日期数据生成的问题,问题如下:大佬们,如果我想单独设一个新列,譬如从2023-11-1到2023-11-31怎么搞法?或者这个数据有11行,可不可以自行设置成2023-11-15到2023-11-26这样子。二、实现过程后来【论草莓如何......