LeetCode刷题入门

2023-11-06

Letcode刷题入门篇

开始准备刷Letcode的题目,入门基础题,从简单的题目开始做,先考虑用python解题

一、两数之和

使用最简单的暴力解法,复杂度为O(n^2),时间复杂度更低的解法,借用List 的相关函数求解,或使用hash求解,参考博客.

  • 使用字典存储数据位置优化搜索
hashmap = {}
for id,num in enumerate(nums):
	hashmap[num] = id
for i in range(len(nums)):
	j = hashmap.get(target-nums[i])
    if j!=None and j!=i:
     	return [i,j]
  • 一遍循环完成,对于遍历到的位置i的数据,每次找其位置之前的数据
hashmap = {}
for i,num in enumerate(nums):
	j = hashmap.get(target-num)
	if j!= None: return [i,j]
	hashmap[num] = i

二、整数反转

int32的数值取值范围为“-2147483648”到“2147483647”;而int64的数值取值范围为“-9223372036854775808”到“9223372036854775808”

三、回文数

自解法,整数转成list,头尾对比,参考后和上一题整数反转有类似求解整数反转的方法:

n,num = 0,x
while (x>0):
	n = n * 10 + x % 10
    x = x / 10

四、罗马数字转整数

知识拓展,罗马数字的表示:

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
特别的: IV 4、IX 9、XL 40、XC 90、CD 400、CM 900

class Solution(object):
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        mapping = {"I":1,"V":5,"X":10,"L":50,"C":100,"D":500,"M":1000}
        num = 0
        for _ in s:
            num = num + mapping[_]
        #IV 4、IX 9、XL 40、XC 90、CD 400、CM 900
        if "IV" in s or "IX" in s:
            num = num - 2
        if "XL" in s or "XC" in s:
            num = num - 20 
        if "CD" in s or "CM" in s:
            num = num - 200
        return num

五、最长公共前缀

模拟字符串对比求最长前缀即可,或对所有字符串按字典排序,比较第一个和最后一个字符串的最长公共前缀

#字符串排序
def longestCommonPrefix(self, strs):
	strs = sorted(strs)
	com = ""
	for i in range(len(strs[0])):
    	if strs[0][i] == strs[-1][i]: com += strs[0][i]
   		else: break
	return com

六、有效的括号

括号匹配问题,每次遇到右括号,找最近的左括号匹配,判断输出,刚开始忽略了有多余的左括号或多余的右括号的情况,参考其他解法,用栈模拟字符串匹配。

#非栈模拟,开销大,运行速度慢
 mapping = {"]":"[","}":"{",")":"("}
        left = []
        for i in range(len(s)):    
            if s[i] in ["]","}",")"]:                
                if len(left) <= 0 : return False #判断右括号溢出
                if s[left[-1]]==mapping[s[i]]:
                    left.pop()
                else: return False
            else: left.append(i)
        return len(left)==0  #判断左括号溢出
#栈模拟
stack = ["$"] #加栈顶,防越界访问
        mapping = {"]":"[","}":"{",")":"("}
        for _ in s:
            if _ in ["(","{","["]:
                stack.append(_)
            else:
                if stack[-1] == mapping[_]:
                    stack.pop()
                else: return False
        return len(stack)==1

七、合并两个有序链表

递归求解,对链表连接相关不太熟悉,基本思路就是判断两个链接值小的加入主链表,最后链接剩下非空的链表,参考求解:

if l1 and l2:
            if l1.val > l2.val: l1, l2 = l2, l1
            l1.next = self.mergeTwoLists(l1.next, l2)
        return l1 or l2

Note:要复习数据结构方面知识,数据结构方面的题目需要多练

删除有序数组中的重复项

模拟下标移动,i,j 两个下标移动

def removeDuplicates(self, nums: List[int]) -> int:
	i,j = 1,0
   	while i < len(nums):
      	if nums[i] == nums[j]:
           	i += 1
      	else:
           	j = j + 1
           	nums[j] = nums[i]        
   	return j + 1

八、移除数组

求解方法类似上题,修改移动的判断条件即可:

def removeElement(self, nums: List[int], val: int) -> int:
        i,j = 0,0
        while i < len(nums):
            #print(i,j)
            if nums[i] == val:
                i += 1
            else:              
                nums[j] = nums[i]
                j = j + 1
                i = i + 1      
        return j 

九、最大子序合

贪心法求解,如果和为负则重新计算:

def maxSubArray(self, nums: List[int]) -> int:
        sum = 0
        result = -inf
        for _ in nums:
            sum += _
            result = max(sum,result)
            if sum<0:
                sum = 0
        
        return result

十、合并有序数组(递减)

通过下标模拟访问数组即可,考虑到求递减的序列,考虑倒序填数组:

 def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        #i:nums1   j:nums2
        i,j,k = m-1,n-1,m+n-1
        while i>=0 and j>=0:
            if nums1[i] > nums2[j] :
                nums1[k] = nums1[i]
                i = i - 1
                k = k - 1
            else:
                nums1[k] = nums2[j]
                j = j - 1
                k = k - 1           
        while i >=0 :      
            nums1[k] = nums1[i]
            i = i - 1
            k = k -1
        while j >= 0 :
            nums1[k] = nums2[j]
            j = j - 1
            k = k - 1
        return nums1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode刷题入门 的相关文章

随机推荐

  • 2022年3月20日-2022年3月26日(按照方案B,本周17小时,合计1236小时,剩8764小时。)

    因为编辑器上视频教程快学完了 而好多公司会做编辑器就可以了 可以学完后面面了 所以 这周仍然进行方案A 上周进度ue4视频教程mysql 1 1 tf1 2 1 oss 4 2 simpleThread 1 2 editor1 3 3 继续
  • 一次编辑多平台发布的终极解决方案(基于Markdown)

    导读 利用markdown语法 让更多的博客作者能够专注于写作本身 而不会因为各种设置打乱了创作的思绪 本文首先简单介绍markdown的编辑器Typora 接着描述了怎么通过Typora的代码模式将编辑好的文件发布到csdn和微信公众号
  • ajax传回的数据不显示,ajax请求返回的数据显示不出来?求教

    出现问题 PHP代码
  • 分布式事务与锁

    事务基础概念 事物的回顾 事务的定义 是数据库的操作的最小工作单元 是作为单个逻辑工作单元执行的一系列操作 这些操作作为一个整体一起向系统提交 要么都执行 要么都不执行 事务是一组不可在分割的操作集合 事务的ACID原则 事务具有四个基本特
  • 从程序员到项目经理:项目管理三大目标

    项目管理的三大目标即时间 成本和质量 实际是告诉项目经理应重点关注什么因素 项目控制应该做什么工作 三大目标虽然简单 但如果能将其真正贯彻 到自己的行动中 那么对项目计划制定 过程控制等工作 均能起到引导作用 有了努力的方向 项目经理也就可
  • Kali2022安装Nessus——Docker版

    下载镜像并且创建Nessus容器 root kali docker run itd name ramisec nessus p 8834 8834 ramisec nessus 更新nessus插件 root kali docker exe
  • Coding-数组(Array)

    数组 Array 面试中最常见的就是围绕数组进行出题 主要原则数组可以随机读取 一般遇到数组相关的题目 都不是直观看到的那样 第一步暴力解法 第二步是否可以排序 是否可以二分 是否可以使用数据结构 哈希表 队列 栈等 要时刻注意一个数组中有
  • 经典神经网络( AlexNet,VggNet,NiN,GoogLeNet,ResNet)

    卷积神经网络演化史 AlexNet 模型结构 贡献 ReLU激活函数 分布式GPU运算 LRN 局部响应归一化 提高泛化能力 重叠池化 池化窗的步长小于池化层的大小 在池 化时产生重叠 正则化方法 数据集增强 dropout 随机关闭神经元
  • Powershell:如何创建自定义对象,以及如何给自定义对象添加属性和方法

    还记得我刚学会使用PowerShell的时候 那种兴奋和幸福感 终于找到了在Windows下一个强大的Shell 因为他叫Power Shell 可以一边使用着熟悉的Windows桌面系统一边装X的Shell编程了 当我使用它来处理CSV时
  • Qt中的UI文件介绍

    UI文件是什么 u i ui ui通常是指Qt设计师设计出来的界面文件的后缀 它本质上是一个标准XML格式的文本文件 需要通过 u i
  • 前端moment库时间戳转标准时间不准确的问题解决

    做前端项目的时候 根据后台返回的一个时间戳 将时间戳需要转换成标准时间 因为项目中有moment这个时间处理包 而且moment对于时间的转换比较强大 可以根据特定的格式进行转换 最终将时间戳转换成 年 月 日 时 分 秒 这种形式 但是转
  • SpringQueryMap -SpringCloud feign get method 接受自定义对象参数

    feign中和controller中不一样的地方 controller中可以get方法使用对象参数无需任何注解 可默认绑定到对象 示例代码如下 GetMapping value ClueClient LIST OPERATIONS publ
  • J2EE基础集合框架之Set

    前言 上次与大家介绍了集合框架的LIst集合 List集合的特点的是元素有序且可重复 今天与大家分享的是也是一种集合 叫做Set集合 他和List集合是相反的 今天我们就一起去探究Set集合 首先跟思维导图来了解我今天要分享的内容吧 说明
  • 卷积神经网络&目标检测

    卷积神经网络 目标检测 一 Inception网络 1 Inception网络基本思想 2 采用1 1卷积降低计算量 3 Inception模块和Inception网络 二 迁移学习 三 数据扩充方法 四 目标检测 1 特征点检测 2 通过
  • postman的json脚本转jmeter的jmx脚本

    一般研发同学会用postman做接口自测 但是我们做性能测试的时候 又不能用postman 对鉴权不了解的接口 自己调试脚本又很麻烦 这个时候 我们就可以用这个方法把json脚本转换成jmeter用的jmx脚本 环境准备 这几个工具需要提前
  • join python

    Python join 方法用于将序列中的元素以指定的字符连接生成一个新的字符串 1 join是针对字符串进行操作的 2 join里面的参数只能是一个 可以是字典 列表 元组 然后以前面的分隔 形成一个新的字符串 但是里面的东西必须是字符串
  • 百度智能云x蓝色光标共绘AI营销新篇章

    9月12日 百度集团副总裁袁佛玉参加蓝色光标Blue AI行业模型发布会 参与启动仪式并带来了主题演讲 大模型重塑数智世界 此次蓝色光标推出的行业模型 得益于百度智能云千帆大模型平台 以下简称千帆平台 的强大支持 标志着双方合作的深度与广度
  • element中Notification组件(this.$notify)自定义样式

    1 自定义样式效果 2 vue代码 this notifications this notify title dangerouslyUseHTMLString true duration obj remindMethod 3 0 4500
  • 风火编程-- 装饰器,reduce, 片函数,闭包概念

    python核心编程 读书笔记 六 第十一章 11 3 6装饰器 在不改变函数体的前提下 对函数添加前置或后置功能 def 装饰器函数 func def wrapper args kwargs before func func after
  • LeetCode刷题入门

    Letcode刷题入门篇 开始准备刷Letcode的题目 入门基础题 从简单的题目开始做 先考虑用python解题 一 两数之和 使用最简单的暴力解法 复杂度为O n 2 时间复杂度更低的解法 借用List 的相关函数求解 或使用hash求