zoukankan      html  css  js  c++  java
  • [LeetCode] 1103. Distribute Candies to People 分糖果

    题目:


     思路:

    本题一开始的思路就是按照流程一步步分下去,算是暴力方法,在官方题解中有利用等差数列进行计算的

    这里只记录一下自己的暴力解题方式

    只考虑每次分配的糖果数,分配的糖果数为1,2,3,4,5,..., 依次加1

    再考虑到分配的轮数,可以利用 i % num_people 来求得第i次应该分配到第几个人

    最后要注意的是,如果当前糖果数小于本应该分配的糖果数,则将当前糖果全部给予,也就是要判断剩余糖果数 candies 与本该分配糖果数 i+1 的大小,谁小分配谁

    代码:

    class Solution {
    public:
        vector<int> distributeCandies(int candies, int num_people) {
            // vector<int> res(num_people, 0);
            // int i=1;
            // for(int k=0; candies>=i+k*num_people; k++){
            //     while(i <= num_people){
            //         if(candies<i+k*num_people){
            //             res[i-1] += candies;
            //             candies = 0;
            //             break;
            //         }
            //         res[i-1] += i+k*num_people;
            //         candies -= i+k*num_people;
            //         i++;
            //     }
            //     i=1;
            // }
            // if(candies) res[0] += candies;
            // return res;
            vector<int> ans(num_people);    // 初始元素为0
            int i=0;
            while(candies!=0){
                ans[i % num_people] += min(candies, i+1);
                candies -= min(candies, i+1);
                i++;
            }
            return ans;
        }
    };

    被注释的代码是自己的想法,虽然复杂度相同,看到题解才发现自己小题大做,没有理解透题目

  • 相关阅读:
    React之JSX语法
    Visual Studio Code 使用 Typings 实现智能提示功能
    React.js 之hello word
    Linux命令详解-cd
    Linux命令详解-ls
    linux常用命令
    LINUX系统配置相关
    netsh
    Visual Studio
    乘法算术表
  • 原文地址:https://www.cnblogs.com/ech2o/p/12419281.html
Copyright © 2011-2022 走看看