当前位置 博文首页 > nameofcsdn的博客:力扣OJ LCP

    nameofcsdn的博客:力扣OJ LCP

    作者:[db:作者] 时间:2021-06-26 09:15

    目录

    LCP 01. 猜数字

    LCP 02. 分式化简

    LCP 06. 拿硬币

    LCP 11. 期望个数统计

    LCP 17. 速算机器人

    LCP 18. 早餐组合


    LCP 01. 猜数字

    小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回 小A 猜对了几次?

    输入的guess数组为 小A 每次的猜测,answer数组为 小B 每次的选择。guess和answer的长度都等于3。

    ?

    示例 1:

    输入:guess = [1,2,3], answer = [1,2,3]
    输出:3
    解释:小A 每次都猜对了。
    示例 2:

    输入:guess = [2,2,3], answer = [3,2,1]
    输出:1
    解释:小A 只猜对了第二次。
    ?

    限制:

    guess 的长度 = 3
    answer 的长度 = 3
    guess 的元素取值为 {1, 2, 3} 之一。
    answer 的元素取值为 {1, 2, 3} 之一。

    class Solution:
        def game(self, guess: List[int], answer: List[int]) -> int:
            ans=0
            for i in range(len(guess)):
                if(guess[i]==answer[i]):
                    ans+=1
            return ans

    LCP 02. 分式化简

    有一个同学在学习分式。他需要将一个连分数化成最简分数,你能帮助他吗?

    连分数是形如上图的分式。在本题中,所有系数都是大于等于0的整数。

    ?

    输入的cont代表连分数的系数(cont[0]代表上图的a0,以此类推)。返回一个长度为2的数组[n, m],使得连分数的值等于n / m,且n, m最大公约数为1。

    ?

    示例 1:

    输入:cont = [3, 2, 0, 2]
    输出:[13, 4]
    解释:原连分数等价于3 + (1 / (2 + (1 / (0 + 1 / 2))))。注意[26, 8], [-13, -4]都不是正确答案。
    示例 2:

    输入:cont = [0, 0, 3]
    输出:[3, 1]
    解释:如果答案是整数,令分母为1即可。
    ?

    限制:

    cont[i] >= 0
    1 <= cont的长度 <= 10
    cont最后一个元素不等于0
    答案的n, m的取值都能被32位int整型存下(即不超过2 ^ 31 - 1)。

    class Solution:
        def fraction(self, cont: List[int]) -> List[int]:
            if len(cont) == 1:
                return [cont[0], 1]
            x = cont[0]
            cont.pop(0)
            a = self.fraction(cont)
            return [x * a[0] + a[1], a[0]]

    LCP 06. 拿硬币

    桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。

    示例 1:

    输入:[4,2,1]

    输出:4

    解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。

    示例 2:

    输入:[2,3,10]

    输出:8

    限制:

    1 <= n <= 4
    1 <= coins[i] <= 10

    class Solution:
        def minCount(self, coins: List[int]) -> int:
            ans=0
            for i in range(len(coins)):
                ans+=(coins[i]+coins[i]%2)/2
            return int(ans)

    LCP 11. 期望个数统计

    某互联网公司一年一度的春招开始了,一共有 n 名面试者入选。每名面试者都会提交一份简历,公司会根据提供的简历资料产生一个预估的能力值,数值越大代表越有可能通过面试。

    小 A 和小 B 负责审核面试者,他们均有所有面试者的简历,并且将各自根据面试者能力值从大到小的顺序浏览。由于简历事先被打乱过,能力值相同的简历的出现顺序是从它们的全排列中等可能地取一个。现在给定 n 名面试者的能力值 scores,设 X 代表小 A 和小 B 的浏览顺序中出现在同一位置的简历数,求 X 的期望。

    提示:离散的非负随机变量的期望计算公式为 。在本题中,由于 X 的取值为 0 到 n 之间,期望计算公式可以是 。

    示例 1:

    输入:scores = [1,2,3]

    输出:3

    解释:由于面试者能力值互不相同,小 A 和小 B 的浏览顺序一定是相同的。X的期望是 3 。

    示例 2:

    输入:scores = [1,1]

    输出:1

    解释:设两位面试者的编号为 0, 1。由于他们的能力值都是 1,小 A 和小 B 的浏览顺序都为从全排列 [[0,1],[1,0]] 中等可能地取一个。如果小 A 和小 B 的浏览顺序都是 [0,1] 或者 [1,0] ,那么出现在同一位置的简历数为 2 ,否则是 0 。所以 X 的期望是 (2+0+2+0) * 1/4 = 1

    示例 3:

    输入:scores = [1,1,2]

    输出:2

    限制:

    1 <= scores.length <= 10^5
    0 <= scores[i] <= 10^6

    class Solution:
        def expectNumber(self, scores: List[int]) -> int:
            scores=sorted(scores)
            x=-1
            ans = 0
            for i in range(len(scores)):
                if scores[i] != x:
                    ans+=1
                    x=scores[i]
            return ans

    LCP 17. 速算机器人

    小扣在秋日市集发现了一款速算机器人。店家对机器人说出两个数字(记作 x 和 y),请小扣说出计算指令:

    "A" 运算:使 x = 2 * x + y;
    "B" 运算:使 y = 2 * y + x。
    在本次游戏中,店家说出的数字为 x = 1 和 y = 0,小扣说出的计算指令记作仅由大写字母 A、B 组成的字符串 s,字符串中字符的顺序表示计算顺序,请返回最终 x 与 y 的和为多少。

    示例 1:

    输入:s = "AB"

    输出:4

    解释:
    经过一次 A 运算后,x = 2, y = 0。
    再经过一次 B 运算,x = 2, y = 2。
    最终 x 与 y 之和为 4。

    提示:

    0 <= s.length <= 10
    s 由 'A' 和 'B' 组成

    class Solution:
        def calculate(self, s: str) -> int:
            x=1
            y=0
            for i in range(len(s)):
                if s[i]=='A':
                    x+=x+y
                else:
                    y+=x+y
            return x+y

    LCP 18. 早餐组合

    小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格。小扣的计划选择一份主食和一款饮料,且花费不超过 x 元。请返回小扣共有多少种购买方案。

    注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1

    示例 1:

    输入:staple = [10,20,5], drinks = [5,5,2], x = 15

    输出:6

    解释:小扣有 6 种购买方案,所选主食与所选饮料在数组中对应的下标分别是:
    第 1 种方案:staple[0] + drinks[0] = 10 + 5 = 15;
    第 2 种方案:staple[0] + drinks[1] = 10 + 5 = 15;
    第 3 种方案:staple[0] + drinks[2] = 10 + 2 = 12;
    第 4 种方案:staple[2] + drinks[0] = 5 + 5 = 10;
    第 5 种方案:staple[2] + drinks[1] = 5 + 5 = 10;
    第 6 种方案:staple[2] + drinks[2] = 5 + 2 = 7。

    示例 2:

    输入:staple = [2,1,1], drinks = [8,9,5,1], x = 9

    输出:8

    解释:小扣有 8 种购买方案,所选主食与所选饮料在数组中对应的下标分别是:
    第 1 种方案:staple[0] + drinks[2] = 2 + 5 = 7;
    第 2 种方案:staple[0] + drinks[3] = 2 + 1 = 3;
    第 3 种方案:staple[1] + drinks[0] = 1 + 8 = 9;
    第 4 种方案:staple[1] + drinks[2] = 1 + 5 = 6;
    第 5 种方案:staple[1] + drinks[3] = 1 + 1 = 2;
    第 6 种方案:staple[2] + drinks[0] = 1 + 8 = 9;
    第 7 种方案:staple[2] + drinks[2] = 1 + 5 = 6;
    第 8 种方案:staple[2] + drinks[3] = 1 + 1 = 2;

    提示:

    1 <= staple.length <= 10^5
    1 <= drinks.length <= 10^5
    1 <= staple[i],drinks[i] <= 10^5
    1 <= x <= 2*10^5

    class Solution:
        def breakfastNumber(self, s: List[int], d: List[int], x: int) -> int:
            s=sorted(s)
            d=sorted(d)
            j=len(d)-1
            ans=0
            for i in range(len(s)):
                while j>=0 and s[i]+d[j]>x:
                    j-=1
                ans+=j+1
            return ans%1000000007

    ?