2022-02-25每日刷题打卡

2022-02-25每日刷题打卡

力扣——每日一题

781. 森林中的兔子

森林中有未知数量的兔子。提问其中若干只兔子 “还有多少只兔子与你(指被提问的兔子)颜色相同?” ,将答案收集到一个整数数组 answers 中,其中 answers[i] 是第 i 只兔子的回答。

给你数组 answers ,返回森林中兔子的最少数量。

示例 1:

输入:answers = [1,1,2]
输出:5
解释:
两只回答了 “1” 的兔子可能有相同的颜色,设为红色。
之后回答了 “2” 的兔子不会是红色,否则他们的回答会相互矛盾。
设回答了 “2” 的兔子为蓝色。
此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。
因此森林中兔子的最少数量是 5 只:3 只回答的和 2 只没有回答的。

简单的说,想要兔子数量最少,我们就尽可能的把相同回答的兔子当成是同一个颜色(回答不同肯定不是同一个颜色),这样这些被聚集在一起的回答一样的兔子,数量就等于它们回答的数+它们自身。但有点要注意的是,聚集在一起的回答相同的兔子不能超过它们回答的数,比如一个兔子说还有三个和它颜色相同的,然后你找来四个回答相同的兔子那显然是不对的,我们计算回答相同的兔子时,如果计数到和回答数一样了就停止计算,把剩下的回答相同的兔子当作是另一种颜色。

class Solution {
public:
    int numRabbits(vector<int>& answers) {
        sort(answers.begin(),answers.end());
        int res=0,n=answers.size();
        for(int i=0;i<n;i++)
        {
            int m=0,ans=answers[i];
            while(i<n&&ans==answers[i]&&m<=ans)
            {
                i++;
                m++;
            }
            res+=ans+1;
            i--;  
        }
        return res;
    }
};
256. 粉刷房子

假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。

当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的正整数矩阵 costs 来表示的。

例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。

请计算出粉刷完所有房子最少的花费成本。

示例 1:

输入: costs = [[17,2,17],[16,16,5],[14,3,19]]
输出: 10
解释: 将 0 号房子粉刷成蓝色,1 号房子粉刷成绿色,2 号房子粉刷成蓝色。
最少花费: 2 + 5 + 3 = 10。

class Solution {
public:
    int minCost(vector<vector<int>>& costs) {
        int n=costs.size();
        int a=costs[0][0],b=costs[0][1],c=costs[0][2];
        int a1=0,b1=0,c1=0;
        for(int i=0;i<n;i++)
        {
            a=min(b1,c1)+costs[i][0];
            b=min(a1,c1)+costs[i][1];
            c=min(a1,b1)+costs[i][2];
            a1=a;
            b1=b;
            c1=c;
        }
        return min(a1,min(b1,c1));
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值