力扣常见算法题

2023-09-14 16:43:19

LeetCode上的问题可以有很多不同的解题思路,具体的解法取决于问题的要求和限制条件。以下是一些常见的解题思路和Python代码示例:

思路

1. 暴力法(Brute Force):

  • 思路:通过穷举所有可能的解决方案,找到满足条件的解。
  • 示例:
   def twoSum(nums, target):
       n = len(nums)
       for i in range(n):
           for j in range(i+1, n):
               if nums[i] + nums[j] == target:
                   return [i, j]
       return []

2. 哈希表(Hash Table):

  • 思路:利用哈希表存储元素和其索引的对应关系,通过查询哈希表中是否存在目标元素来解决问题。
  • 示例:
   def twoSum(nums, target):
       hash_table = {}
       for i, num in enumerate(nums):
           complement = target - num
           if complement in hash_table:
               return [hash_table[complement], i]
           hash_table[num] = i
       return []

3. 双指针(Two Pointers):

  • 思路:使用两个指针从不同的方向遍历数组,根据问题的要求移动指针,找到满足条件的解。
  • 示例:
   def twoSum(numbers, target):
       left, right = 0, len(numbers) - 1
       while left < right:
           sum = numbers[left] + numbers[right]
           if sum == target:
               return [left + 1, right + 1]
           elif sum < target:
               left += 1
           else:
               right -= 1
       return []

4. 动态规划(Dynamic Programming):

  • 思路:将问题分解为子问题,并通过存储子问题的解来避免重复计算,从而得到最优解。
  • 示例:
   def maxSubArray(nums):
       n = len(nums)
       dp = [0] * n
       dp[0] = nums[0]
       max_sum = dp[0]
       for i in range(1, n):
           dp[i] = max(nums[i], dp[i-1] + nums[i])
           max_sum = max(max_sum, dp[i])
       return max_sum

这只是一些解题思路的例子,实际上,每个问题都有其独特的特点和解决方法。在解决LeetCode问题时,建议先仔细阅读问题描述,理解问题的要求和限制条件,然后根据问题的特点选择合适的解题思路。

例题

1. 两数之和(Two Sum):

  • 题目描述:给定一个整数数组nums和一个目标值target,在数组中找出和为目标值的两个整数,并返回它们的索引。
  • 示例代码:
   def twoSum(nums, target):
       hash_table = {}
       for i, num in enumerate(nums):
           complement = target - num
           if complement in hash_table:
               return [hash_table[complement], i]
           hash_table[num] = i
       return []

2. 盛最多水的容器(Container With Most Water):

  • 题目描述:给定n个非负整数a1,a2,…,an,其中每个数表示坐标(i,ai)处的一个点。在坐标系中画n条垂直线,垂直线i的两个端点分别为(i,ai)和(i,0)。找出两条线,它们与x轴共同构成的容器可以容纳最多的水。
  • 示例代码:
   def maxArea(height):
       left, right = 0, len(height) - 1
       max_area = 0
       while left < right:
           area = min(height[left], height[right]) * (right - left)
           max_area = max(max_area, area)
           if height[left] < height[right]:
               left += 1
           else:
               right -= 1
       return max_area

3. 无重复字符的最长子串(Longest Substring Without Repeating Characters):

  • 题目描述:给定一个字符串,请找出其中不含有重复字符的最长子串的长度。
  • 示例代码:
   def lengthOfLongestSubstring(s):
       max_length = 0
       start = 0
       char_map = {}
       for i in range(len(s)):
           if s[i] in char_map and start <= char_map[s[i]]:
               start = char_map[s[i]] + 1
           else:
               max_length = max(max_length, i - start + 1)
           char_map[s[i]] = i
       return max_length

4. 两两交换链表中的节点(Swap Nodes in Pairs):

  • 题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
  • 示例代码:
   class ListNode:
       def __init__(self, val=0, next=None):
           self.val = val
           self.next = next

   def swapPairs(head):
       if not head or not head.next:
           return head
       dummy = ListNode(0)
       dummy.next = head
       prev = dummy
       while head and head.next:
           first_node = head
           second_node = head.next
           prev.next = second_node
           first_node.next = second_node.next
           second_node.next = first_node
           prev = first_node
           head = first_node.next
       return dummy.next

在这里插入图片描述

更多推荐

【实训项目】你好,教练-校园私教平台的设计与开发

1.设计摘要随着社会的进步,人们的健康意识逐渐提高,越来越多的人选择在闲暇时间健身,在大学生群体中,这一现象犹为明显。在大学城内,有多家健身房供同学选择,也有许多同学选择在操场或者宿舍内自己健身,全民健身已经逐渐成为一种潮流。在2018年,国家体育总局近日推出解决群众健身难的十项举措,包括建设一批健身步道、建设一批体育

回顾每一代 iPhone 的特性升级和创新

文章目录前言初代iPhone(2007)iPhone3G(2008)iPhone3GS(2009)iPhone4(2010)iPhone4S(2011)iPhone5(2012)iPhone5c和5s(2013)iPhone6和6Plus(2014)iPhone6s和6sPlus(2015)iPhone7和7Plus(

DDR模块电路的PCB设计建议

DDR电路简介RK3588DDR控制器接口支持JEDECSDRAM标准接口,原理电路16位数据信号如图8-1所示,地址、控制信号如图8-2所示,电源信号如图8-3所示。电路控制器有如下特点:1、兼容LPDDR4/LPDDR4X/LPDDR5标准;2、支持64bits数据总线宽度,由4个16bits的DDR通道组成,每个

【Vue】Vue中lauch.js的详细介绍,各个参数的内涵

"lauch.js"在Vue中是一个启动文件,通常用来创建Vue实例并配置一些默认设置。下面是常见的"lauch.js"参数及其意义:el:表示要挂载的元素,通常是一个字符串或者一个DOM对象。router:表示使用的路由,通常是一个VueRouter实例。store:表示使用的状态管理器,通常是一个VuexStore

【Linux成长史】Linux权限的详细讲解

🎬博客主页:博主链接🎥本文由Mmalloc原创,首发于CSDN🙉🎄学习专栏推荐:LeetCode刷题集数据库专栏初阶数据结构🏅欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📆未来很长,值得我们全力奔赴更美好的生活✨文章目录😇本章详情😇Linux权限的概念⏳Linux下的两种用户:超级用户(root),普通

讲解socket 网络编程的 5 大隐患

1.忽略返回状态第一个隐患很明显,但它是开发新手最容易犯的一个错误。如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失。反过来,这可能传播错误,使定位问题的源头变得困难。捕获并检查每一个返回状态,而不是忽略它们。考虑清单1显示的例子,一个套接字send函数。清单1.忽略API函数返回状态intstatu

【C#】FileInfo类 对文件进行操作

提示:使用FileInfo类时,要引用System.IO命名空间。usingSystem.IO;FileInfo类生成文件删除文件移动文件复制文件获取文件名判断文件是否存在属性列表其它常用方法生成文件Create():在指定路径上创建文件。FileInfomyFile=newFileInfo(@"E:\vsspace\

VUE路由与nodeJS环境搭建

VUE路由Vue路由是Vue.js提供的路由管理工具,它允许我们在应用程序中实现页面之间的导航,从而使单页面应用程序的开发更加方便。通过Vue路由,我们可以轻松地创建和管理多个视图,并在这些视图之间导航。Vue路由使用HTML5的HistoryAPI来实现无刷新页面的切换效果,同时还提供了很多高级特性,例如路由嵌套、路

PWA建快应用,小程序建超级App?

小程序在特定的平台生态系统中崭露头角,为开发者提供了更深度的集成和用户接触点。通过应用商店的分发和推广机制,小程序能够迅速扩大用户基础,为企业和品牌提供了直接触达用户的机会。尤其是在社交媒体平台上,小程序的分享和使用已成为用户互动和交流的一种重要方式。PWA代表“渐进式网络应用”(ProgressiveWebAppli

MySQL常考知识点

MySQL常考知识点索引的基本原理索引设计的原则事务的基本特性和隔离级别什么是MVCC简述MyISAM和InnoDB的区别Explain语句结果中各个字段分表表示什么索引覆盖是什么最左前缀原则是什么B树和B+树的区别,为什么Mysql使⽤B+树Mysql锁有哪些,如何理解Mysql慢查询该如何优化?索引的基本原理索引⽤

blender怎么设置中文界面

你们知道Blender软件是什么吗?你知道blender怎么设置中文界面吗?Blender是个GNU的3D绘图软件,建模、算图、动画等功能都相当的完整,可以说已经具有了一般商业软件的规模。Blender大部分的功能都有热键,操作起来相当地轻快;而由于几乎所有的功能按钮鼠标移上去一段时间都会出现详细说明,也多少弥补了操作

热文推荐