刷题记录-day11 (构建乘积矩阵、第一个只出现一次的字符、替换空格、数组中出现次数超过一半的数字)

1. 构建乘积矩阵

在这里插入图片描述
在这里插入图片描述

class Solution:
    def multiply(self , A: List[int]) -> List[int]:
        # write code here
        # 通过构建矩阵,分别计算下三角和上三角,并且把对应位置累乘
        # 如图所示:
        B = [1]*len(A)
        # 下三角
        for i in range(1,len(A)):
            B[i] = A[i-1] * B[i-1]
        temp = 1
        # 上三角
        for i in range(len(A)-2, -1, -1):
            temp = A[i+1] * temp
            B[i] = B[i] * temp
        return B
        
        
        # 暴力破解法
        B = []
        for i in range(len(A)):
            temp = 1
            for s in range(len(A)):
                if s != i:
                    temp = temp*A[s]
            B.append(temp)
        return B

2.第一个只出现一次的字符

在这里插入图片描述

class Solution:
    def FirstNotRepeatingChar(self , str: str) -> int:
        # write code here
        # 使用python自带的count函数:
        for s in str:
            if str.count("%s"%(s))==1:
                return str.index("%s"%(s))
                break
        return -1
        
        # 简单的方法,直接使用字典来存储每个字符出现的总次数、以及该字符第一次出现的位置
        num_dict = {}
        str_list = list(str)
        for i in range(len(str_list)):
            if str_list[i] not in num_dict.keys():
                num_dict[str_list[i]]=[1,i]
                continue
            else:
                num_dict[str_list[i]][0] += 1
        for k,v in num_dict.items():
            if v[0] == 1:
                return v[1]
            else:
                continue
        return -1

3.替换空格

在这里插入图片描述

class Solution:
    def replaceSpace(self , s: str) -> str:
        # write code here
        # 遍历,依次替换
        res = ""
        for si in list(s):
            if si == " ":
                res += "%20"
            else:
                res += si
        return res
        
        # 使用python自带replace函数
        s = s.replace(" ", "%20")
        return s

4.数组中出现次数超过一半的数字

在这里插入图片描述

class Solution:
    def MoreThanHalfNum_Solution(self , numbers: List[int]) -> int:
        # write code here
        # 排序后,直接取最中间的元素。因为过半的话,即使排在最前面或最后面,都一定可以分布到正中间
        numbers = sorted(numbers)
        return numbers[len(numbers)//2]
        
        # 首先排序,然后遍历数组依次把每个元素当成答案
        numbers = sorted(numbers)
        res = numbers[0]
        count = 0
        lenth = len(numbers)
        for num in numbers:
            if count > lenth/2:
                return res
            if num == res:
                count += 1
                continue
            else:
                res = num
                count = 1
        return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值