python:基础入门练习055 - 060


# -*- coding: utf-8 -*-

# 055: 重新排列数组
# 给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。
# 请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排列,返回重排后的数组。
# 示例 1:
# 输入:nums = [2,5,1,3,4,7], n = 3
# 输出:[2,3,5,4,1,7]
# 解释:由于 x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 ,所以答案为 [2,3,5,4,1,7]
#
# 示例 2:
# 输入:nums = [1,2,3,4,4,3,2,1], n = 4
# 输出:[1,4,2,3,3,2,4,1]
#
# 示例 3:
# 输入:nums = [1,1,2,2], n = 2
# 输出:[1,2,1,2]

class Solution055:
    def shuffle(self, nums: list[int], n: int) -> list[int]:
        a_len = int(len(nums) / 2)
        a1 = nums[0:a_len]
        a2 = nums[a_len:]
        a3 = []
        for i in range(a_len):
            a3.append(a1[i])
            a3.append(a2[i])
        return a3


s055 = Solution055()
r055 = s055.shuffle([2, 5, 1, 3, 4, 7], 3)
print(r055)  # [2, 3, 5, 4, 1, 7]


# 056: 基于排列构建数组
# 给你一个 从 0 开始的排列 nums(下标也从 0 开始)。请你构建一个 同样长度 的数组 ans ,其中,
# 对于每个 i(0 <= i < nums.length),都满足 ans[i] = nums[nums[i]] 。返回构建好的数组 ans 。
# 从 0 开始的排列 nums 是一个由 0 到 nums.length - 1(0 和 nums.length - 1 也包含在内)的不同整数组成的数组。
# 示例 1:
# 输入:nums = [0,2,1,5,3,4]
# 输出:[0,1,2,4,5,3]
# 解释:数组 ans 构建如下:
# ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]
#     = [nums[0], nums[2], nums[1], nums[5], nums[3], nums[4]]
#     = [0,1,2,4,5,3]
#
# 示例 2:
# 输入:nums = [5,0,1,2,3,4]
# 输出:[4,5,0,1,2,3]
# 解释:数组 ans 构建如下:
# ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]
#     = [nums[5], nums[0], nums[1], nums[2], nums[3], nums[4]]
#     = [4,5,0,1,2,3]

class Solution056:
    def buildArray(self, nums: list[int]) -> list[int]:
        return [nums[i] for i in nums]


s056 = Solution056()
r056 = s056.buildArray([5, 0, 1, 2, 3, 4])
print(r056)  # [4, 5, 0, 1, 2, 3]


# 057: 数组串联
# 给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans ,数组下标 从 0 开始计数 ,
# 对于所有 0 <= i < n 的 i ,满足下述所有要求:
# ans[i] == nums[i]
# ans[i + n] == nums[i]
# 具体而言,ans 由两个 nums 数组 串联 形成。
# 示例 1:
# 输入:nums = [1,2,1]
# 输出:[1,2,1,1,2,1]
# 解释:数组 ans 按下述方式形成:
# - ans = [nums[0],nums[1],nums[2],nums[0],nums[1],nums[2]]
# - ans = [1,2,1,1,2,1]

# 示例 2:
# 输入:nums = [1,3,2,1]
# 输出:[1,3,2,1,1,3,2,1]
# 解释:数组 ans 按下述方式形成:
# - ans = [nums[0],nums[1],nums[2],nums[3],nums[0],nums[1],nums[2],nums[3]]
# - ans = [1,3,2,1,1,3,2,1]

class Solution057:
    def getConcatenation(self, nums: list[int]) -> list[int]:
        # return nums * 2    # 解法1,但是销毁比较大。
        return nums + nums  # 解法2,销毁比较小。


s057 = Solution057()
r057 = s057.getConcatenation([5, 0, 1])
print(r057)  # [5, 0, 1, 5, 0, 1]


# 058: 数组串联
#  给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 
# S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
# J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。
# 示例 1:
# 输入: J = "aA", S = "aAAbbbb"
# 输出: 3

# 示例 2:
# 输入: J = "z", S = "ZZ"
# 输出: 0

class Solution058:
    def numJewelsInStones(self, jewels: str, stones: str) -> int:
        number = 0
        for i in stones:
            if i in jewels:
                number += 1
        return number


s058 = Solution058()
r058 = s058.numJewelsInStones("peace", "AbcDef")
print(r058)  # ce - > 2


# 059: 统计匹配检索规则的物品数量
# 给你一个数组 items ,其中 items[i] = [typei, colori, namei] ,描述第 i 件物品的类型、颜色以及名称。
# 另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。
# 如果第 i 件物品能满足下述条件之一,则认为该物品与给定的检索规则 匹配 :
# ruleKey == "type" 且 ruleValue == typei 。
# ruleKey == "color" 且 ruleValue == colori 。
# ruleKey == "name" 且 ruleValue == namei 。
# 统计并返回 匹配检索规则的物品数量 。

# 示例 1:
# 输入:items = [["phone","blue","pixel"],["computer","silver","lenovo"],["phone","gold","iphone"]],
# ruleKey = "color", ruleValue = "silver"
# 输出:1
# 解释:只有一件物品匹配检索规则,这件物品是 ["computer","silver","lenovo"] 。
#
# 示例 2:
# 输入:items = [["phone","blue","pixel"],["computer","silver","phone"],["phone","gold","iphone"]],
# ruleKey = "type", ruleValue = "phone"
# 输出:2
# 解释:只有两件物品匹配检索规则,这两件物品分别是 ["phone","blue","pixel"] 和 ["phone","gold","iphone"] 。
# 注意,["computer","silver","phone"] 未匹配检索规则。

class Solution059:
    def countMatches(self, items: list[list[str]], ruleKey: str, ruleValue: str) -> int:
        count = 0
        k = ["type", "color", "name"]

        word_index = k.index(ruleKey)

        for i in items:
            for index, value in enumerate(i):
                if index == word_index and value == ruleValue:
                    count += 1
        return count


s059 = Solution059()
items059 = [["phone", "blue", "pixel"], ["computer", "silver", "phone"], ["phone", "gold", "iphone"]]

r059 = s059.countMatches(items059, "type", "phone")
print(r059)  # 2


# 060: 数组异或操作
# 给你两个整数,n 和 start 。
# 数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。
# 请返回 nums 中所有元素按位异或(XOR)后得到的结果。
# 示例 1:
# 输入:n = 5, start = 0
# 输出:8
# 解释:数组 nums 为 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8 。"^" 为按位异或 XOR 运算符。
#
# 示例 2:
# 输入:n = 4, start = 3
# 输出:8
# 解释:数组 nums 为 [3, 5, 7, 9],其中 (3 ^ 5 ^ 7 ^ 9) = 8.
#
# 示例 3:
# 输入:n = 1, start = 7
# 输出:7


class Solution060:
    def xorOperation(self, n: int, start: int) -> int:
        new_list = [start + 2 * i for i in range(n)]
        result = 0
        for i in new_list:
            result = result ^ i
        return result


s060 = Solution060()
r060 = s060.xorOperation(4, 3)
print(r060)  # 8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值