仗剑走天涯

个人站

苟若恒,何必三更起五更眠,最无益,莫过一日暴十日寒


leetCode刷题

目录

富翁招收保镖

/**
 * @author pppppp
 * @date 2021/7/20 8:34   耗时 20min
 */
/*  题目:某个富翁招收保镖,为了提高吸引力,设置了一个特殊的工资,
    第一天保镖能获取1元报酬,随后两天能获得2元,在随后三天能够获得3元...
    以此类推,给定一个天数,得出能够获得的报酬
    输入 3, 返回5   1+2+2 = 5
    输入 10,返回30  1+2+2+3+3+3+4+4+4+4 = 30
*   */
public class DD {
    public static void main(String[] args){
        int flag = 6;
        System.out.println(demo(flag));
    }
    static int demo(int inNum){
        int sum = 0;
        for (int i = 1; ; i++) {
            if(inNum >= i){
                sum += i*i;
            }else {
                sum = sum+inNum*i;
                break;
            }
            inNum -=i;
        }
        return sum;
    }
}

781. 森林中的兔子

难度 中等

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

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

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

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

输入: answers = [] 输出: 0 说明:

answers 的长度最大为1000。 answers[i] 是在 [0, 999] 范围内的整数。

 public static int numRabbits(int[] answers) {
        if(answers.length == 0){
            return 0;
        }
        int sum = 0;
        //1.对数组进行从大到小的排序
        Arrays.sort(answers);
        Map<Integer,Integer> map = new HashMap();
        //2.将数组变为 map  key为 数值  value 为个数
        int temp = answers[0];
        int value = 1;
        map.put(temp, value);
        for (int i = 1; i < answers.length; i++) {
            if(answers[i] == temp){
                value++;
            }else {
                value = 1;
                temp = answers[i];
            }
            map.put(temp, value);
        }

        // System.out.println(map);
        Set<Integer> set = map.keySet();
        for (Integer key : set) {
            int tempValue = map.get(key);
          /*  if(key == 0){
                sum += tempValue;
                continue;
            }*/

            if(tempValue<= key+1){
                sum +=  key+ 1;
            }else {
                int i;
                if(tempValue %(key + 1) == 0){
                    i = tempValue /(key + 1);
                }else {
                    i = tempValue /(key + 1) + 1;
                }

                sum += (key+ 1) * i;
            }
        }
        System.out.println(sum);
        return sum;
    }

    public static void main(String[] args) {
        // int[] answers = {1, 1, 2};
        int[] answers = {1,0,1,0,0};
        // int[] answers = {4,0,2,2,4};
        // int[] answers = {2,1,2,2,2,2,2,2,1,1};
        // int[] answers = {0,1,0,2,0,1,0,2,1,1};
        // int[] answers = {1, 1, 1,2};
        // int []answers = {5,1, 1,1, 2,5,6};
        // int []answers = {5,5,5,5,5,5,5};
        // int []answers = {10,10,10};
        int i = numRabbits(answers);
    }

待优化