python:基础入门练习061 - 065


# -*- coding: utf-8 -*-
# 061: 两个数对之间的最大乘积差
# 两个数对 (a, b) 和 (c, d) 之间的 乘积差 定义为 (a * b) - (c * d) 。
# 例如,(5, 6) 和 (2, 7) 之间的乘积差是 (5 * 6) - (2 * 7) = 16 。
# 给你一个整数数组 nums ,选出四个 不同的 下标 w、x、y 和 z ,使数对 (nums[w], nums[x]) 和
# (nums[y], nums[z]) 之间的 乘积差 取到 最大值 。
# 返回以这种方式取得的乘积差中的 最大值 。
# 示例 1:
# 输入:nums = [5,6,2,7,4]
# 输出:34
# 解释:可以选出下标为 1 和 3 的元素构成第一个数对 (6, 7) 以及下标 2 和 4 构成第二个数对 (2, 4)
# 乘积差是 (6 * 7) - (2 * 4) = 34
#
# 示例 2:
# 输入:nums = [4,2,5,9,7,4,8]
# 输出:64
# 解释:可以选出下标为 3 和 6 的元素构成第一个数对 (9, 8) 以及下标 1 和 5 构成第二个数对 (2, 4)
# 乘积差是 (9 * 8) - (2 * 4) = 64


class Solution061:  # 思路大乘大,减去, 小乘小
    def maxProductDifference(self, nums: list[int]) -> int:
        nums.sort()
        return nums[-1] * nums[-2] - nums[0] * nums[1]


s061 = Solution061()
r061 = s061.maxProductDifference([4, 2, 5, 9, 7, 4, 8])
print(r061)  # 64


# 062: 字符串中的第一个唯一字符
# 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
# 示例:
# s = "leetcode"
# 返回 0
#
# s = "loveleetcode"
# 返回 2

class Solution062:
    def firstUniqChar(self, s: str) -> int:
        num = -1
        for i, v in enumerate(s):
            if s.count(v) == 1:
                num = i
                break
        return num


s062 = Solution062()
r062 = s062.firstUniqChar("loveleetcode")
print(r062)  # 2


# 063: 有多少小于当前数字的数字
# 给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
# 换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。
# 以数组形式返回答案。
# 示例 1:
# 输入:nums = [8,1,2,2,3]
# 输出:[4,0,1,1,3]
# 解释:
# 对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。
# 对于 nums[1]=1 不存在比它小的数字。
# 对于 nums[2]=2 存在一个比它小的数字:(1)。
# 对于 nums[3]=2 存在一个比它小的数字:(1)。
# 对于 nums[4]=3 存在三个比它小的数字:(1,2 和 2)。
#
# 示例 2:
# 输入:nums = [6,5,4,8]
# 输出:[2,1,0,3]
#
# 示例 3:
# 输入:nums = [7,7,7,7]
# 输出:[0,0,0,0]


class Solution063:
    def smallerNumbersThanCurrent(self, nums: list[int]) -> list[int]:
        count = len(nums)
        s_list = []
        for i in range(count):
            s_num = nums[i]
            inner = 0
            for j in range(count):
                if nums[j] < s_num:
                    inner += 1

            s_list.append(inner)
        return s_list


s063 = Solution063()
r063 = s063.smallerNumbersThanCurrent([5, 0, 1])
print(r063)  # [2, 0, 1]


# 064: 随机数索引
# 给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。您可以假设给定的数字一定存在于数组中。
# 注意:
# 数组大小可能非常大。使用太多额外空间的解决方案将不会通过测试。
# 示例:
#
# int[] nums = new int[] {1,2,3,3,3};
# Solution solution = new Solution(nums);
#
# // pick(3) 应该返回索引 2,3 或者 4。每个索引的返回概率应该相等。
# solution.pick(3);
#
# // pick(1) 应该返回 0。因为只有nums[0]等于1。
# solution.pick(1);


class Solution064:

    def __init__(self, nums: list[int]):
        self.nums = nums

    def pick(self, target: int) -> int:
        count_value = self.nums.count(target)
        if count_value == 1:
            return self.nums.index(target)
        else:
            import random
            new_list = []
            for i, v in enumerate(self.nums):
                if v == target:
                    new_list.append(i)
            return random.choice(new_list)


s064 = Solution064([1, 2, 3, 3, 3])
r064 = s064.pick(3)
print(r064)  # index 2,3,4中的一个。


# 065: 一维数组的动态和
# 给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。
# 请返回 nums 的动态和。
# 示例 1:
# 输入:nums = [1,2,3,4]
# 输出:[1,3,6,10]
# 解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。
#
# 示例 2:
# 输入:nums = [1,1,1,1,1]
# 输出:[1,2,3,4,5]
# 解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1] 。
#
# 示例 3:
# 输入:nums = [3,1,2,10,1]
# 输出:[3,4,6,16,17]


class Solution065:
    def runningSum(self, nums: list[int]) -> list[int]:
        new_list = []
        init_sum = 0
        for i in nums:
            init_sum += i
            new_list.append(init_sum)
        return new_list


s065 = Solution065()
r065 = s065.runningSum([1, 2, 3, 4])
print(r065)  # [1, 3, 6, 10]

微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容