【暑假算法打卡--7.7】

本文探讨了几个算法问题的解决思路,包括分发饼干以最大化满足的孩子数量,心算挑战中求最大有效得分的策略,以及保持城市天际线和ShoeShuffling等题目。通过排序和迭代策略,展示了在实际问题中应用数学和数据结构的方法。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档



提示:以下是本篇文章正文内容,下面案例可供参考

一、分发饼干

题目来源

思路

先将数组排序,按照孩子的胃口从小到大排序,依次满足每个孩子,应该选择可以满足孩子大小的饼干

题目

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。

对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j]

= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

示例 1:

输入: g = [1,2,3], s = [1,1] 输出: 1 解释: 你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。
虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。 所以你应该输出1。 示例 2:

输入: g = [1,2], s = [1,2,3] 输出: 2 解释: 你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。
你拥有的饼干数量和尺寸都足以让所有孩子满足。 所以你应该输出2.

提示:

1 <= g.length <= 3 * 104 0 <= s.length <= 3 * 104 1 <= g[i], s[j] <=
231 - 1

class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        int cnt=0;
        int g_j =0 ,s_i =0;
        while(g_j < g.length && s_i < s.length ){
        if(g[g_j]<= s[s_i] )
        {
            g_j++;
            s_i++;
            cnt+=1;
        }else{
            s_i++;
        }
        }
    return cnt; 
    }
}

在这里插入图片描述

二、心算挑战

题目来源

思路

先将最大cnt个数中的cnt-1 个相加,轮流替换后面cnt 中的一个, 遍历最大cnt 个数进行替换,每次都从最小的牌快开始和别人换最大的牌,直到偶数

题目

「力扣挑战赛」心算项目的挑战比赛中,要求选手从 N 张卡牌中选出 cnt 张卡牌,若这 cnt
张卡牌数字总和为偶数,则选手成绩「有效」且得分为 cnt 张卡牌数字总和。 给定数组 cards 和 cnt,其中 cards[i] 表示第
i 张卡牌上的数字。 请帮参赛选手计算最大的有效得分。若不存在获取有效得分的卡牌方案,则返回 0。

示例 1:

输入:cards = [1,2,8,9], cnt = 3

输出:18

解释:选择数字为 1、8、9 的这三张卡牌,此时可获得最大的有效得分 1+8+9=18。

示例 2:

输入:cards = [3,3,1], cnt = 1

输出:0

解释:不存在获取有效得分的卡牌方案。

提示:

1 <= cnt <= cards.length <= 10^5 1 <= cards[i] <= 1000

class Solution {
    public int maxmiumScore(int[] cards, int cnt) {
        Arrays.sort(cards);
        int sum=0;
        int index = cards.length -1; 
        while(cnt>0){
            sum += cards[index--];
            cnt--;
        }
        if(sum %2 ==0){
            return sum;
        }
        for(int i=index; i>=0;i--){
            for(int j=index +1;j< cards.length;j++){
                sum -= cards[j];
                sum += cards[i];

               if(sum %2 ==0){
                return sum;
            }   
                 sum -= cards[i];
                sum += cards[j];

            }
        }
        return 0;
    }
}

在这里插入图片描述

三、保持城市天际线

题目来源

四、Shoe Shuffling

题目来源

思路

在这里插入图片描述

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人间凡尔赛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值