力扣刷题记录——682. 棒球比赛、628. 三个数的最大乘积、693. 交替位二进制数

简介: 力扣刷题记录——682. 棒球比赛、628. 三个数的最大乘积、693. 交替位二进制数

682. 棒球比赛

题目描述

你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。

比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:

  1. 整数 x - 表示本回合新获得分数 x
  2. "+" - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。
  3. "D" - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。
  4. "C" - 表示前一次得分无效,将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。

请你返回记录中所有得分的总和。

示例 1:

输入:ops = ["5","2","C","D","+"]

输出:30

解释:

"5" - 记录加 5 ,记录现在是 [5]

"2" - 记录加 2 ,记录现在是 [5, 2]

"C" - 使前一次得分的记录无效并将其移除,记录现在是 [5].

"D" - 记录加 2 * 5 = 10 ,记录现在是 [5, 10].

"+" - 记录加 5 + 10 = 15 ,记录现在是 [5, 10, 15].

所有得分的总和 5 + 10 + 15 = 30


示例 2:

输入:ops = ["5","-2","4","C","D","9","+","+"]

输出:27

解释:

"5" - 记录加 5 ,记录现在是 [5]

"-2" - 记录加 -2 ,记录现在是 [5, -2]

"4" - 记录加 4 ,记录现在是 [5, -2, 4]

"C" - 使前一次得分的记录无效并将其移除,记录现在是 [5, -2]

"D" - 记录加 2 * -2 = -4 ,记录现在是 [5, -2, -4]

"9" - 记录加 9 ,记录现在是 [5, -2, -4, 9]

"+" - 记录加 -4 + 9 = 5 ,记录现在是 [5, -2, -4, 9, 5]

"+" - 记录加 9 + 5 = 14 ,记录现在是 [5, -2, -4, 9, 5, 14]

所有得分的总和 5 + -2 + -4 + 9 + 5 + 14 = 27


示例 3:

输入:ops = ["1"]

输出:1

解题思路

这题很基础就是for循环加上if else分支的判断,删除最后一个元素用pop方法,最后计算一下列表的总和就可以。

解题代码

1. def calPoints(operations):
2.     target_list = []
3.     for i in operations:
4.         if i == "C":
5.             target_list.pop()
6.         elif i == "D":
7.             target_list.append(target_list[-1]*2)
8.         elif i == "+":
9.             target_list.append(target_list[-1]+target_list[-2])
10.         else:
11.             target_list.append(int(i))
12.         # print(target_list)
13.     return sum(target_list)

628. 三个数的最大乘积

题目描述

给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

示例 1:

输入:nums = [1,2,3]

输出:6


示例 2:

输入:nums = [1,2,3,4]

输出:24


示例 3:

输入:nums = [-1,-2,-3]

输出:-6

解题思路

用itertools.permutations找出列表中所有可能的3位列表,求列表的乘积,将结果添加到一个目标列表中,最终返回这个列表的最大值就可以。

解题过程

1. import itertools
2. def maximumProduct(nums):
3.     temp_list = list(itertools.permutations(nums,3))
4.     reslut_list = []
5.     for i in temp_list:
6.         reslut_list.append(i[0]*i[1]*i[2])
7.     return max(reslut_list)

可惜超时了,看来得换一个思路。 问题的关键在于怎么处理负数。如果数组中全是非负数,则排序后最大的三个数相乘即为最大乘积;如果全是非正数,则最大的三个数相乘同样也为最大乘积。如果数组中有正数有负数,则最大乘积既可能是三个最大正数的乘积,也可能是两个最小负数(即绝对值最大)与最大正数的乘积。

1. def maximumProduct(nums):
2.     nums.sort(reverse=-1)
3. # 如果全为正数
4. if min(nums) > 0:
5. return nums[0] * nums[1] * nums[2]
6. elif max(nums) < 0:
7. return nums[0] * nums[1] * nums[2]
8. else:
9.         reslut_1 = nums[0]*nums[1]*nums[2]
10.         reslut_2 = nums[-1]*nums[-2]*nums[0]
11. if reslut_1 > reslut_2:
12. return reslut_1
13. else:
14. return reslut_2

693. 交替位二进制数

题目描述

给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。

示例 1:

输入:n = 5

输出:true

解释:5 的二进制表示是:101


示例 2:

输入:n = 7

输出:false

解释:7 的二进制表示是:111.

示例 3:

输入:n = 11

输出:false

解释:11 的二进制表示是:1011.


解题思路

先用bin转化成二进制数字,然后用一个指针去遍历就可以了,还是比较基础的。

解题代码

1. def hasAlternatingBits(n):
2.     bin_str = bin(n)[2:]
3.     l_p = 0
4. while l_p+1 < len(bin_str):
5. if bin_str[l_p] == bin_str[l_p+1]:
6. return False
7.         l_p += 1
8. return True

 


相关文章
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
63 6
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
55 4
|
4月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
124 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
43 1
|
3月前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
4月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
72 7
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
55 5
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
32 4
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Leetcode题目"剑指 Offer 21. 调整数组顺序使奇数位于偶数前面"的两种Python解决方案,一种是使用双端队列调整数组顺序,另一种是使用双指针法将奇数移到数组前半部分,偶数移到后半部分。
29 4