4月4号打卡

2021.4.4 森林中的兔子

题目描述

森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。

返回森林中兔子的最少数量。

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

输入: answers = [10, 10, 10]
输出: 11

输入: answers = []
输出: 0

思路1

将给予的数组里相同的数字匹配,即认为他们是同一种颜色,但不能让他们的总数超过他们报出的数字+1,比如 1 1 1,不能认为这三个是同一种颜色,可以用HashMap存储数字,以"颜色"(即兔子报的数字)为key,value则设为当前颜色还能匹配多少个兔子,如果为0则remove。

    public int numRabbits(int[] answers) {
        HashMap<Integer,Integer> arr = new HashMap<>();
        int sum = answers.length;//初始化默认n个兔子颜色都不同
        for (int answer : answers) {
            if (arr.containsKey(answer) && arr.get(answer) != 0) {
                arr.replace(answer,arr.get(answer) - 1);
                sum -= 1;//匹配成功意味着初始化情况是错的,有两个兔子颜色相同,则sum应该-1
                if(arr.get(answer) == 0) //如果value为0不能再匹配兔子,应该移除
                    arr.remove(answer);
            } else {
                if(answer != 0) { //数字为0意味着这兔子颜色唯一,初始化时已经加过,无需添加
                    arr.put(answer,answer);
                    sum += answer;
                }
            }
        }
        return sum;
    }

以上代码其实可以优化一下,无需用到map,只需要用一个数组,用空间换时间。

  public int numRabbits(int[] answers) {
        int[] color = new int[1000];
        int sum = answers.length;
        for(int i : answers){
            if(color[i] <= 0){
                color[i] = i;
                sum += i;
            }else {
                color[i]--;
                sum -= 1;
            }
        }
        return sum;
    }
uniapp日历打卡是基于uni-app的一个功能点,通过使用日历组件来进行打卡操作。根据引用提到的功能点,uniapp日历打卡包括定位打卡、迟到、外勤、请假、出差、补卡、考勤记录等功能。 在实现日历打卡功能时,可以使用引用提到的calendarCard.json文件来引入所需组件,比如top-title和calendar组件。 具体实现日历打卡的步骤如下: 1. 首先,需要计算出每个的日期天数,获取本1是星期几,以及上残余天数。根据引用的描述,可以使用相关算法来计算。 2. 接下来,可以根据计算得到的日期信息,在日历上标注出打卡记录。可以使用不同的标记来表示不同的打卡状态,比如迟到、外勤等。 3. 当用户点击某个日期时,可以触发相应的打卡操作。可以根据需求设计打卡的逻辑,比如记录打卡时间、定位信息等。 4. 打卡记录可以保存在数据库或云端,以便后续查询和管理。 需要注意的是,具体的实现方式可能会根据项目的具体需求而有所不同,以上只是一个基本的实现思路。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于uni-app+uni ui考勤打卡H5项目 定位打卡,日历打卡记录,考勤记录,绩效(地图位置)等](https://blog.csdn.net/weixin_45118394/article/details/117033005)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [小程序---小程序实现日历打卡功能](https://blog.csdn.net/maidu_xbd/article/details/109651735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值