代码随想录——水果成篮(Leetcode904)地狱难度

题目链接
在这里插入图片描述

滑动窗口思想,确实是想到了,可是Java内置函数是一点儿不会啊sos

class Solution {
    public int totalFruit(int[] fruits) {
        int n = fruits.length;
        // 创建一个HashMap对象cnt,用于存储水果种类和出现次数
        Map<Integer, Integer> cnt = new HashMap<Integer, Integer>();

		// left滑动窗口初始位置,ans记录最大水果种类的数量
        int left = 0, ans = 0;
        // right滑动窗口终止位置,遍历数组fruits
        for (int right = 0; right < n; ++right) {
        	// 在当前右边 right 位置放置一个水果,并增加这个水果的计数。
            cnt.put(fruits[right], cnt.getOrDefault(fruits[right], 0) + 1);
            // 当 cnt 中的水果种类数量大于 2 时,进行循环。
            while (cnt.size() > 2) {
            	// 移除窗口左边 left 位置的水果,并减少这个水果的计数。
                cnt.put(fruits[left], cnt.get(fruits[left]) - 1);
                // 如果左边的水果计数为 0,说明这个水果已经被完全移除了。
                if (cnt.get(fruits[left]) == 0) {
                	// 从 cnt 中移除这个水果。
                    cnt.remove(fruits[left]);
                }
                // 窗口左边界 left 向右移动一位。
                ++left;
            }
            // 更新答案 ans,即记录最多可以同时存在的不同水果种类数量。
            ans = Math.max(ans, right - left + 1);
        }
        return ans;
    }
}

HashMap

  • 用KV键值对存储元素,元素是无序的,key不允许重复,value允许重复,允许存储null。
  • 添加元素(键值对):put(key, value)方法
  • 访问元素:get(key)方法
  • 删除元素:remove(key)方法可以删除key对应的键值对
  • 删除所有键值对:clear()方法
  • 获取指定key对应value,如果找不到key则返回默认值:getOrDefault()方法
  • 计算HashMap元素数量:size()方法
  • 迭代HashMap:可以使用 for-each来迭代 HashMap 中的元素。如果你只想获取 key,可以使用 keySet() 方法,然后可以通过 get(key)方法 获取对应的 value,如果你只想获取 value,可以使用 values() 方法
// 引入 HashMap 类      
import java.util.HashMap;

public class RunoobTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Google");
        Sites.put(2, "Runoob");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        // 输出 key 和 value
        for (Integer i : Sites.keySet()) {
            System.out.println("key: " + i + " value: " + Sites.get(i));
        }
        // 返回所有 value 值
        for(String value: Sites.values()) {
          // 输出每一个value
          System.out.print(value + ", ");
        }
    }
}

Math

  • 返回两个参数中的最大值:max()方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值