刷leetcode中常用且有效的方法总结

刷题的时候经常会因为不知道一个方法多写很多行代码,既然有trick为何不用!你问我眼中为何常含泪水,因为我忘记方法忘的深沉。那么我决定出一期!刷题中常用且有效的方法们!将会陆续补充,有补充欢迎评论区留言

目录

python

.join()

Counter

n.sort()

sorted(n)

set()

for i in range

enumerate()

C++

ord


python

.join()

join()是 Python 中的一个字符串方法,它用于将序列(如列表、元组、集合等,但集合需要首先转换为列表或其他有序序列,因为集合是无序的)中的元素以指定的字符连接生成一个新的字符串。

stack = ["home", "user", "documents"]  
result = "/" + "/".join(stack)  
print(result)  # 输出: /home/user/documents

Counter

Counter 提供了一个快速简单的方式来统计哈希对象在集合中出现的次数。

        1.通过传递一个可迭代对象(如列表、元组、集合等)给 Counter 的构造函数来创建一个 Counter 对象,这个可迭代对象中的元素将会被计数:

cnt = Counter(['apple', 'banana', 'apple', 'orange', 'banana', 'grape'])  print(cnt)  # 输出: Counter({'apple': 2, 'banana': 2, 'orange': 1, 'grape': 1})

        2.访问元素计数,你可以像访问字典一样访问 Counter 对象的元素及其计数:

print(cnt['apple'])  # 输出: 2  
print(cnt['banana'])  # 输出: 2  
print(cnt['pear'])  # 如果 pear 不在 Counter 中,则返回 0

        3.更新计数,可以使用 update() 方法来更新计数器中的计数。可以传递另一个可迭代对象或者另一个 Counter 对象:

cnt.update(['apple', 'pear', 'banana'])  
print(cnt)  # 输出: Counter({'apple': 3, 'banana': 3, 'orange': 1, 'grape': 1, 'pear': 1})

n.sort()

这是一个列表(list)的方法,它会直接对列表n进行原地(in-place)排序,即直接修改原列表,而不返回任何值(或者说返回None)。这意味着如果你尝试将n.sort()的返回值赋给另一个变量,你会得到一个None。

# 使用 n.sort()  
my_list = [3, 1, 4, 1, 5, 9, 2]  
my_list.sort()  # 直接修改原列表  
print(my_list)  # 输出: [1, 1, 2, 3, 4, 5, 9]  # 尝试获取 n.sort() 的返回值  
result = my_list.sort()  
print(result)  # 输出: None  

sorted(n)

这是一个内置函数,它可以对任何可迭代对象n进行排序,并返回一个新的列表,包含排序后的元素。原列表n不会被修改。

# 使用 sorted(n)  
my_list = [3, 1, 4, 1, 5, 9, 2]  
sorted_list = sorted(my_list)  # 返回新的列表,原列表不变  
print(sorted_list)  # 输出: [1, 1, 2, 3, 4, 5, 9]  
print(my_list)  # 输出: [1, 1, 2, 3, 4, 5, 9],原列表未变  # 对元组进行排序  
my_tuple = (3, 1, 4, 1, 5, 9, 2)  
sorted_tuple = sorted(my_tuple)  # 返回新的列表  
print(sorted_tuple)  # 输出: [1, 1, 2, 3, 4, 5, 9]

set()

可能这里出现set有人会觉得很奇怪,但是我觉得set有时候真的很好用!尤其是需要筛去多余元素的时候,因为set是专用来保存无序且不重复集合的。

定义:

  • python中set是一种无序且不重复的元素集合。
  • Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔
occ = set() #创建一个空集合
non_empty_set = {1,2,3} #创建一个包含元素的非空集合
#注意,如果要创建空集合,只能使用 set() 函数实现。因为直接使用一对 {},Python 解释器会将其视为一个空字典。occ.add(1) #添加元素
occ.add(2)occ.remove(1) #删除元素
occ.discard(2) 
#删除元素,与remove的区别是,若元素不存在,使用remove会引发KeyError,使用discard不会occ.pop() #随机删除集合中元素
occ.clear() #清空集合
occ.copy #复制集合
len(occ) #计算occ中元素个数#集合运算
set1 = {1,2,3}
set2 = {3,4,5}union_set = set1 | set2 #并集:{1,2,3,4,5}
intersection_set = set1&set2 #交集 {3}
different_set = set1 -set2 #差集 {1,2}

迭代方面:

for i in range

    for i in range(n)用于正向迭代,从0到n-1。
    for i in range(start, n)用于正向迭代,从start到n-1。
    for i in range(n, -1, -1)用于逆向迭代,从n到0。

参数:<起点>, <终点>, <增量>

传入两个参数:省略增量。意味着增量是1

传入一个参数:省略起点和增量。意味着起点是0,增量是1

enumerate()

enumerate()函数常用于循环中获取(可迭代对象)元素和索引的对应关系,例如列表、元组或字符串,enumerate可以将其组成一个索引序列,利用它可以同时获得索引和值。

#1.基本用法:my_list = ['apple', 'banana', 'cherry']for index, value in enumerate(my_list):print(index, value)#这段代码会输出:0 apple1 banana2 cherry#2.指定起始索引my_list = ['apple', 'banana','cherry']for index, value in enumerate(my_list, start=1):print(index,value)#这段代码会输出:1 apple2 banana3 cherry

装饰器

最近发现装饰器是一个非常有意思的东西,很高级!

允许你在不修改函数或类的源代码的情况下,为它们添加额外的功能或修改它们的行为。装饰器本质上是一个接受函数作为参数的可调用对象(通常是函数或类),并返回一个新函数。

def my_decorator(func):  def wrapper(*args, **kwargs):  print("Something is happening before the function is called.")  result = func(*args, **kwargs)  print("Something is happening after the function is called.")  return result  return wrapper  @my_decorator  
def say_hello(name):  print(f"Hello, {name}!")  # 当你调用 say_hello 函数时,它实际上会调用 wrapper 函数,  
# wrapper 函数在调用 say_hello 之前和之后都添加了一些额外的输出。  
say_hello("Alice")

早期的结构化编程,几乎所有的方法都是“静态方法”,而直到面向对象编程语言来临时,才被区分为了实例化方法和静态方法。而这样的区分,并不是单一从性能的角度进行考虑的,而是为了让开发更加模式化,面向对象化。

比如说人这个类,姓名、年龄等,这些属性就必须是实例化属性,而所属科目,比如灵长类,则一定是静态属性,因为这个属性并不依赖于某一个人。

(1)@classmethod

@classmethod 是一个 Python 的内置装饰器,用于定义类方法。类方法是属于类而不是实例的方法,可以通过类名或实例调用,与实例的状态无关。@classmethod 装饰的方法的第一个参数通常被命名为 cls,表示类本身。

使用方法:无需实例化,可以通过类名或实例调用

    注意:
        类方法内不可以直接调用实例方法,也不可以调用实例变量
        类和实例都可以直接调用类方法。

class MyClass:@staticmethoddef static_method():print("This is a static method.")@classmethoddef class_method(cls):cls.static_method()print("This is a class method.")def instance_method(self):self.static_method()print("This is an instance method.")# 通过类名调用静态方法
MyClass.static_method()
# 输出: This is a static method.# 通过类方法调用静态方法
MyClass.class_method()
# 输出:
# This is a static method.
# This is a class method.# 创建类的实例
obj = MyClass()
# 通过实例调用静态方法
obj.static_method()
# 输出: This is a static method.# 通过实例方法调用静态方法
obj.instance_method()
# 输出:
# This is a static method.
# This is an instance method.

(2)@staticmethod

@staticmethod 是一个 Python 的一个内置装饰器,用于定义静态方法。静态方法是类中的方法,与类的实例无关,也无法访问类的实例变量或其他实例方法。静态方法通过类名调用,而不是通过实例调用。

(3)@property、@setter装饰器基本用法

    定义
    @property装饰器是Python中一个特殊的装饰器,用于定义类的属性。它提供了一种简洁的方式来定义属性的访问方法,并且可以在需要时进行计算或验证。应用于类的实例方法,将其转换为类的属性。通过使用@property装饰器,可以将一个方法定义为只读属性,也可以定义一个可读写的属性,并且可以实现属性删除。

    @setter装饰器用于定义一个属性的setter方法,用于修改属性的值。使用@setter时,我们需要在@property装饰的属性方法之后,紧跟一 个setter方法,并使用@属性名.setter来装饰该方法

    @setter通常用于以下场景:
    当一个属性的值需要计算得到,而不是直接存储在类的属性中时,我们可以使用@setter来提供一个修改属性值的接口。
    当某个属性的值需要经过一些处理后再进行存储时,我们可以使用@setter来自动执行处理操作。

C++

ord

ord(s[i]) - ord('0'):

ord()的意思时求一个字符的Ascii码。

因为程序里如果x时用字符读入的,不能把他当作数字运算,要转化为数字。

比如说“0”的Ascii码为48,"1"到“9”的Ascii码分别为49到57,所以ord(‘0’)就是等于48的,

所以改为ord(x) - 48也是对的,通过上述表达式就可以把字符转化为数字了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/42417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 函数高级——函数的默认参数

函数默认参数 在C中&#xff0c;函数的形参列表中的形参是可以有默认值的 语法&#xff1a;返回值类型 函数名 &#xff08;参数 默认值&#xff09;{ } 示例&#xff1a; 正确代码&#xff1a; 运行结果&#xff1a;

昇思25天学习打卡营第13天|sea_fish

打开第13天。本次学习的内容为LLM原理和实践中基于MindSpore通过GPT实现情感分类的内容。记录学习的过程。 根据实验系统中的内容一步一步学习基于MindSpore通过GPT实现情感分类的整个过程。整个过程分为以下三个过程&#xff1a; 数据集加载与处理&#xff1a;数据集加载和数…

开源六轴协作机械臂myCobot 280接入GPT4大模型!实现更复杂和智能化的任务

本文已经或者同济子豪兄作者授权对文章进行编辑和转载 引言 随着人工智能和机器人技术的快速发展&#xff0c;机械臂在工业、医疗和服务业等领域的应用越来越广泛。通过结合大模型和多模态AI&#xff0c;机械臂能够实现更加复杂和智能化的任务&#xff0c;提升了人机协作的效率…

Laravel批量插入数据:提升数据库操作效率的秘诀

Laravel批量插入数据&#xff1a;提升数据库操作效率的秘诀 Laravel作为PHP的现代Web应用框架&#xff0c;提供了优雅而简洁的方法来处理数据库操作。批量插入数据是数据库操作中常见的需求&#xff0c;尤其是在处理大量数据时&#xff0c;批量插入可以显著提高性能。本文将详…

LDAP技术解析:打造安全、高效的企业数据架构

1.LDAP简介 LDAP&#xff08;Lightweight Directory Access Portocol&#xff0c;轻量目录访问协议&#xff09;是一种用于访问与管理分布式目录服务的开放协议。目录服务是一种特殊的数据库&#xff0c;优化用于读取和查询操作&#xff0c;而不是写入操作。LDAP广泛用于身份验…

盘点当下智能体应用开发的几种形态

现在多智能体系统开发的关注度越来越高了&#xff0c;不光在开发者的圈子热度很高&#xff0c;很多职场人士&#xff0c;甚至是小白也参与其中&#xff0c;因为现在的门槛越来越低了&#xff0c;尤其是&#xff0c;最近特别火的扣子&#xff08;coze&#xff09;和百度的appbui…

【TB作品】51单片机 Proteus仿真00016 乒乓球游戏机

课题任务 本课题任务 (联机乒乓球游戏)如下图所示: 同步显示 oo 8个LED ooooo oo ooooo 8个LED 单片机 单片机 按键 主机 从机 按键 设计题目:两机联机乒乓球游戏 图1课题任务示意图 具体说明: 共有两个单片机,每个单片机接8个LED和1 个按键,两个单片机使用串口连接。 (2)单片机…

数据结构学生信息顺序表

主程序 #include "fun.h" int main(int argc, const char *argv[]) { seq_p Screate_seq(); stu data; printf("请问要输入几个学生的数据&#xff1a;"); int n; scanf("%d",&n); while(n--) { prin…

MySQL Binlog详解:提升数据库可靠性的核心技术

文章目录 1. 引言1.1 什么是MySQL Bin Log&#xff1f;1.2 Bin Log的作用和应用场景 2. Bin Log的基本概念2.1 Bin Log的工作原理2.2 Bin Log的三种格式 3. 配置与管理Bin Log3.1 启用Bin Log3.2 配置Bin Log参数3.3 管理Bin Log文件3.4 查看Bin Log内容3.5 使用mysqlbinlog工具…

STM32崩溃问题排查

文章目录 前言1. 问题说明2. STM32&#xff08;Cortex M4内核&#xff09;的寄存器3. 崩溃问题分析3.1 崩溃信息的来源是哪里&#xff1f;3.2 崩溃信息中的每个关键字代表的含义3.3 利用崩溃信息去查找造成崩溃的点3.4 keil5中怎么根据地址找到问题点3.5 keil5上编译时怎么输出…

【NTN 卫星通信】Starlink基于终端用户的测量以及测试概述

1 概述 收集了一些starlink的资料&#xff0c;是基于终端侧部署在野外的一些测试以及测量结果。 2 低地球轨道卫星网络概述 低地球轨道卫星网络(lsn)被认为是即将到来的6G中真正实现全球覆盖的关键基础设施。本文介绍了我们对Starlink端到端网络特征的初步测量结果和观测结果&…

STM32-ADC+DMA

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. ADC模拟-数字转换器1.1 ADC模拟-数字转换器1.2 逐次逼近型ADC1.3 ADC框图1.4 ADC基本结构1.5 输入通道1.6 规则组的转换模式1.6.1 单次转换&#xff0c;非扫描模式1.6.2 连续转换&#xff0c;非扫描模式1.6.3 单次…

Tabu Search — 温和介绍

Tabu Search — 温和介绍 目录 Tabu Search — 温和介绍 一、说明 二、什么是禁忌搜索以及我可以在哪里使用它&#xff1f; 三、禁忌搜索原则 四、短期记忆和积极搜索&#xff1a; 五、举例时间 六、结论&#xff1a; 七、参考&#xff1a; 一、说明 最近&#xff0c;我参加了…

【INTEL(ALTERA)】Nios® II/f 处理器可能会误清除处理器中断启用位

目录 说明 解决方法 说明 由于Nios II处理器出现问题&#xff0c;当作为具有数据紧密耦合内存 &#xff08;DTCM&#xff09; 的 Nios II/f 实施时&#xff0c;可能会有一个特定的指令序列可能导致状态寄存器中的处理器中断启用 &#xff08;PIE&#xff09; 位在进入中断处…

在DevEco运行typeScript代码,全网详细解决执行Set-ExecutionPolicy RemoteSigned报出的错

目录 基本思路 网络推荐 本人实践 如下操作,报错: 基本思路 //在DevEco运行typeScript代码 /** * 1.保证node -v出现版本,若没有,配置环境变量(此电脑-属性-高级系统变量配置-path-粘贴路径);DevEco在local.properties中可看到当前nodejs的路径 * 2.npm install …

海外仓一件代发功能自动化:海外仓WMS系统配置方法

根据数据显示&#xff0c;2014-2019年短短几年之间&#xff0c;跨境电商销售总额增长了160%以上。这为跨境电商商家和海外仓&#xff0c;国际物流等服务端企业都提供了巨大的发展机遇。 然而&#xff0c;作为海外仓&#xff0c;要想服务好跨境电商&#xff0c;仓库作业的每一个…

C++之break / continue陈述九州地址QA98嚸CC语言

break陈述 关键字 break 用于跳出 switch 陈述或跳出回圈。 以下程式示范switch陈述中使用break #include <iostream>int main() {int data 0;switch (data) {case 0:std::cout << "0" << std::endl;case 1: case 2:std::cout << "…

车载测试之-CANoe创建仿真工程

在现代汽车工业中&#xff0c;车载测试是确保车辆电子系统可靠性和功能性的关键环节。而使用CANoe创建仿真工程&#xff0c;不仅能够模拟真实的车辆环境&#xff0c;还能大大提升测试效率和准确性。那么&#xff0c;CANoe是如何实现这些的呢&#xff1f; 车载测试中&#xff0…

06:C语言数组

C语言数组 1、怎么定义数组2、怎么使用数组&#xff1f;3、不同数据类型的数组4、sizeof运算符5、字符数组 数组就是数组成一个组&#xff0c;数就是一个特定 数据类型相同的变量&#xff0c;组就是说好多数放在了一起。 1、怎么定义数组 int a[5] {1&#xff0c;2&#xff…

刷题之合并两个有序数组(leetcode)

因为换了手机号码&#xff0c;之前leetcode的账号登不上去了&#xff0c;正好太久不刷题&#xff0c;很多思路都没了&#xff0c;所以重新开始刷leetcode&#xff01; 这道题很简单&#xff0c;指针模拟一下&#xff0c;从后往前考虑&#xff0c;先看最大值。 class Solution…