Leetcode Day19 技巧类

2024-09-03 07:04
文章标签 leetcode 技巧 day19

本文主要是介绍Leetcode Day19 技巧类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

75 颜色分类

136 一个数字出现一次, 其他出现两次

class Solution:def singleNumber(self, nums: List[int]) -> int:return reduce(lambda x, y: x ^ y, nums)

这个解法基于以下异或运算的性质:

任何数与 0 异或得到的结果是其本身:a ^ 0 = a
任何数与其自身异或得到的结果是 0:a ^ a = 0
异或运算满足交换律和结合律:a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c

因此,当我们对列表中的所有数字进行异或操作时:

出现两次的数字会相互抵消(因为 a ^ a = 0)
只出现一次的数字会保留下来(因为 a ^ 0 = a)

最终,reduce 函数返回的结果就是只出现一次的那个数字。

reduce相当于1101s中的accumulate, 你也可以自己指定起始值,

137 一个数字出现一次, 其他三次

6 Z字形表达一个string

class Solution:def convert(self, s: str, numRows: int) -> str:if numRows == 1:return sres = [[] for _ in range(numRows)]pos = 0row = 0down = Truewhile pos < len(s):if down and row < numRows - 1:res[row].append(s[pos])pos += 1row += 1continueif down and row == numRows - 1:down = Falseres[row].append(s[pos])pos += 1row -= 1continueif not down and row > 0:res[row].append(s[pos])pos += 1row -= 1continueif not down and row == 0:res[row].append(s[pos])pos += 1row += 1down = Truecontinuereturn "".join([''.join(x) for x in res])

我就直接这样模拟了, 没什么技巧

134 加油站

class Solution:def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:n = len(gas)spare = 0min_spare = float('inf')min_index = 0for i in range(n):spare += gas[i] - cost[i]if spare < min_spare:min_spare = sparemin_index = ireturn -1 if spare < 0 else (min_index + 1) % n

“亏空最严重的一个点必须放在最后一步走,等着前面剩余的救助”, 这一句话直接醍醐灌顶了.
但是还存在一个问题, 为什么最后的spare >= 0就代表能通过呢?

135 分发糖果

n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。

你需要按照以下要求,给这些孩子分发糖果:

每个孩子至少分配到 1 个糖果。
相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

输入:ratings = [1,0,2]
输出:5
解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。

class Solution:def candy(self, ratings: List[int]) -> int:dp1 = [1] * len(ratings)for i in range(1, len(ratings)):if ratings[i] > ratings[i-1]:dp1[i] = dp1[i - 1] + 1dp2 = [1] * len(ratings)for i in range(len(ratings) - 2, -1, -1):if ratings[i] > ratings[i + 1]:dp2[i] = dp2[i + 1] + 1ans = [1] * len(ratings)for i in range(len(ratings)):ans[i] = max(dp1[i], dp2[i])return sum(ans)

左边一次, 右边一次即可

191 二进制中1的个数

class Solution:def hammingWeight(self, n: int) -> int:res = 0while n:res += n & 1n >>= 1return res

可以优化, 利用n & (n-1)

n&(n−1)作用: 二进制数字 n 最右边的 1 变成 0 ,其余不变。

def hammingWeight(self, n: int) -> int:res = 0while n:res += 1n &= n - 1return res

这篇关于Leetcode Day19 技巧类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132362

相关文章

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

Python中处理NaN值的技巧分享

《Python中处理NaN值的技巧分享》在数据科学和数据分析领域,NaN(NotaNumber)是一个常见的概念,它表示一个缺失或未定义的数值,在Python中,尤其是在使用pandas库处理数据时,... 目录NaN 值的来源和影响使用 pandas 的 isna()和 isnull()函数直接比较 Na

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L