LeetCode每日练习

2022-06-06  本文已影响0人  ShowMeCoding
50. Pow(x, n)

实现 pow(x, n) ,即计算 xn 次幂函数。

输入:x = 2.00000, n = 10
输出:1024.00000

# class Solution:
#     def myPow(self, x: float, n: int) -> float:
#         return pow(x, n)

# 用 低维度 计算 高维度
# 0、n为负数:x^n = (1/x)^(-n)
# 1、n为偶数:x^n = x^(n/2)*x^(n/2)
# 2、n为奇数:x^n = x^((n-1)/2)*x^((n-1)/2)*x

class Solution:
    def myPow(self, x: float, n: int) -> float:
        if x == 0:
            return 0.0
        res = 1
        # 当n<0时,对 x 和 n 进行转换 
        if n < 0:
            x = 1 / x
            n = -n
        # 对奇数和偶数进行处理
        while n:
            # n 为奇数,奇数的二进制中有偶数个1,和1与运算的结果必为1
            if n & 1:
                res *= x
            x *= x
            # 右移运算等同于除以二
            n >>= 1
        return res
1051. 高度检查器

学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。
排序后的高度情况用整数数组 expected 表示,其中 expected[i] 是预计排在这一行中第 i 位的学生的高度(下标从 0 开始)。
给你一个整数数组 heights ,表示 当前学生站位 的高度情况。heights[i] 是这一行中第 i 位学生的高度(下标从 0 开始)。
返回满足 heights[i] != expected[i] 的 下标数量 。

输入:heights = [1,1,4,2,1,3]
输出:3
解释:
高度:[1,1,4,2,1,3]
预期:[1,1,1,2,3,4]
下标 2 、4 、5 处的学生高度不匹配。

# 非递减的高度顺序:递增
class Solution:
    def heightChecker(self, heights: List[int]) -> int:
        h = sorted(heights)
        # print(h)
        # print(heights)
        res = 0
        for i in range(len(h)):
            if h[i] != heights[i]:
                res += 1
        return res
# 非递减的高度顺序:递增
class Solution:
    def heightChecker(self, heights: List[int]) -> int:
        # 首先对相同高度的学生进行计数统计
        h_max = max(heights)
        h = [0]*(h_max + 1)
        for hei in heights:
            h[hei] += 1
        # print(h)
        # 然后进行比较
        idx, res = 0,0
        for i in range(1, h_max + 1):
            for j in range(h[i]):
                # 依次进行比较
                if heights[idx] != i:
                    res += 1
                # 更新下标
                idx += 1
        return res
上一篇下一篇

猜你喜欢

热点阅读