算法设计大赛T5 - T7

T5 给你一个整数数组 nums ,请计算数组的 中心下标 。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。
如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1

思路:当nums为空时,直接返回 -1。不为空时遍历nums,sum1为sum[i]前的元素和,sum2为后的元素和,当sum1与sum2相等,则找到该中心下标。
代码:

class Solution:
    def pivotIndex(self, nums: List[int]) -> int:
        if nums == []:
            return -1
        sum1 = 0
        sum2 = sum(nums[1:])
        for i in range(len(nums)-1):
            if sum1 == sum2:
                return i
            sum1 += nums[i]
            sum2 -= nums[i+1]
        if sum1 == sum2:
            return i+1
        return -1

运行结果:
在这里插入图片描述

T6 颠倒给定的 32 位无符号整数的二进制位。

思路:yysy这题刚开始时确实还懵了几下,以为传入的n是个字符串,结果是个二进制文件,所以这里使用位运算。
简单介绍一下python中的位运算,>>是右移,<<是左移,|是或运算,&是与运算,具体功能可自行查阅(http://c.biancheng.net/view/2184.html)。
在这里,每次遍历二进制数的最后一位,添加到res的末尾,然后随着res的左移,先前在末尾的的数逐渐提前,最后形成逆序的二进制数。
这里,n&1(0000 0000 0000 0001)意为取n最后一位二进制数,而 | 意为将左移后的res与提取的最后一位合并,形成新的二进制数。
代码如下

class Solution:
    def reverseBits(self, n: int) -> int:
        res = 0
        for i in range(32):
            res = (res << 1) | (n & 1)
            n >>= 1
        return res

运行结果
在这里插入图片描述

T7给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

思路:
用python的话这道题目就太简单了,将所有字母按ASCII码排序,在比较两字符是否相等即可

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        return sorted(list(s)) == sorted(list(t))

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值