力扣Python方法解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 力扣Python方法解析

1.两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。


你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。


你可以按任意顺序返回答案。


示例 1:


输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:


输入:nums = [3,2,4], target = 6

输出:[1,2]

示例 3:


输入:nums = [3,3], target = 6

输出:[0,1]


方法一:暴力解法,通过两个for循环,然后进行一个判断来获得正确的答案,此方法复杂度较高为O(n^2)  注意:使用双重循环时间应注意迭代对象的起始。


class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
       for i in range(0,len(nums)):
           for j in range(i+1,len(nums)):
               if nums[i] + nums[j] ==target:
                    return [i,j]

方法二:哈希表,建立一个哈希表,通过target-nums[i] 来判断是否哈希表内有答案,若无将该值添加进去。


class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
       ind={} #建立一个哈希表
       for i, num in enumerate(nums):
                if target - num in ind: #判断是否在哈希表内
                    return [ind[target - num], i]
                ind[nums[i]] = i

2.两数相加

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。


请你将两个数相加,并以相同形式返回一个表示和的链表。


你可以假设除了数字 0 之外,这两个数都不会以 0 开头。


方法一:模拟解法


# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        result = ListNode() #初始化一个新链表
        carry, curr = 0, result #初始化进位,设置curr为指针
        while l1 or l2 or carry:
            s = (l1.val if l1 else 0) + (l2.val if l2 else 0) + carry
            carry, val = divmod(s, 10)
            curr.next = ListNode(val)
            curr = curr.next
            l1 = l1.next if l1 else None
            l2 = l2.next if l2 else None
        return result.next


方法二:递归


class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
    if  l1 is None:
        return l2
    if  l2 is NoneL
        return l1
    l1.val += l2.val
    if l1.val >=10:
        l1.next = self.addTwoNumbers(ListNode(l1.val // 10),l1.next)
        l1.val %= 10
    li.next = self.addTwoNumbers(l1.next,l2.next)
    return l1

3.无重复字符的最长字串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。


示例 1:


输入: s = "abcabcbb"

输出: 3

解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:


输入: s = "bbbbb"

输出: 1

解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。


这是一个经典的利用滑动窗口解决的问题,是属于不定长类型的问题。


class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
            #Step1:定义需要维护的变量
            max_len = 0
            hashmap = {}
            #Step2:定义窗口的首尾端,然后滑动窗口
            right = 0
            for left in range(len(s)):
            #Step3:更新需要维护的变量,max_len,hashmap
                hashmap[s[left]] = hashmap.get(s[left],0) +1
                if len(hasnmap) == left-right+1:
                        max_len = max(max_len,left-right+1)
            #Step4:根据题意,题目的窗口可变:这个时候一般涉及到窗口是否合法的问题
            #这个时候要用一个while不断移动窗口左指针,从而剔除非法元素直到窗口合法
            # 当窗口长度大于哈希表长度时候 (说明存在重复元素),窗口不合法
            # 所以需要不断移动窗口左指针直到窗口再次合法, 同时提前更新需要维护的变量 (hashmap)
                while left - right +1>len(hashmap):
                    head  = s[start]
                    hashmap[head] -=1
                    if hashmap[head] ==0:    
                            del hashmap[head]
                    right +=1
             return max_len

4.寻找两个正序数组的中位数:

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。


算法的时间复杂度应该为 O(log (m+n)) 。


示例 1:


输入:nums1 = [1,3], nums2 = [2]

输出:2.00000

解释:合并数组 = [1,2,3] ,中位数 2


我们把题目看为求第k小的数:


class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        def dfs(nums1,i,nums2,j,k)->float:
            if(len(nums1)-i)>len(nums2)-j:
                return dfs(nums2,j,nums1,i,k)
            if len(nums1)==i:
                return nums2[j+k-1]
            if k==1:
                    return min(nums1[i],nums2[j])
            si = min(i + k // 2, len(nums1))     # 注意越界, 第一个列表不够取k/2个数的时候,全部取出来即可
            sj = j + k//2
            if nums1[si - 1] < nums2[sj - 1]:
                return dfs(nums1, si, nums2, j, k - (si - i))
            else:
                return dfs(nums1, i, nums2, sj, k - (sj - j))
        tot = len(nums1) + len(nums2) # 总长度
        # 如果为奇数
        if(tot & 1):
            return dfs(nums1, 0, nums2, 0, tot // 2 + 1)
        else:
            left = dfs(nums1, 0, nums2, 0, tot // 2)
            right = dfs(nums1, 0, nums2, 0, tot // 2 + 1)
            return (left + right) / 2



相关文章
|
4天前
|
机器学习/深度学习 数据采集 算法
数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例
有多种方法可以处理时间序列数据中的噪声。本文将介绍一种在我们的研究项目中表现良好的方法,特别适用于时间序列概况中数据点较少的情况。
19 1
数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例
|
5天前
|
消息中间件 关系型数据库 数据库
Python实时监测数据库表数据变化的方法
在实现时,需要考虑到应用的实时性需求、数据库性能影响以及网络延迟等因素,选择最适合的方法。每种方法都有其适用场景和限制,理解这些方法的原理和应用,将帮助开发者在实际项目中做出最合适的技术选择。
43 17
|
5天前
|
XML 数据格式 Python
Python技巧:将HTML实体代码转换为文本的方法
在选择方法时,考虑到实际的应用场景和需求是很重要的。通常,使用标准库的 `html`模块就足以满足大多数基本需求。对于复杂的HTML文档处理,则可能需要 `BeautifulSoup`。而在特殊场合,或者为了最大限度的控制和定制化,可以考虑正则表达式。
21 12
|
3天前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
3天前
|
存储 关系型数据库 MySQL
技术解析:MySQL中取最新一条重复数据的方法
以上提供的两种方法都可以有效地从MySQL数据库中提取每个类别最新的重复数据。选择哪种方法取决于具体的使用场景和MySQL版本。子查询加分组的方法兼容性更好,适用于所有版本的MySQL;而窗口函数方法代码更简洁,执行效率可能更高,但需要MySQL 8.0及以上版本。在实际应用中,应根据数据量大小、查询性能需求以及MySQL版本等因素综合考虑,选择最合适的实现方案。
22 6
|
2天前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
15 3
|
1天前
|
存储 数据处理 索引
Python列表操作的方法总结
通过掌握上述方法,你可以有效地操作Python列表,完成各种数据处理任务。列表的灵活性和多功能性使其成为Python编程中不可或缺的工具。
11 1
|
9天前
|
机器学习/深度学习 人工智能 TensorFlow
深入骨髓的解析:Python中神经网络如何学会‘思考’,解锁AI新纪元
【9月更文挑战第11天】随着科技的发展,人工智能(AI)成为推动社会进步的关键力量,而神经网络作为AI的核心,正以其强大的学习和模式识别能力开启AI新纪元。本文将探讨Python中神经网络的工作原理,并通过示例代码展示其“思考”过程。神经网络模仿生物神经系统,通过加权连接传递信息并优化输出。Python凭借其丰富的科学计算库如TensorFlow和PyTorch,成为神经网络研究的首选语言。
12 1
|
11天前
|
Python
Python中几种lambda排序方法
【9月更文挑战第7天】在Python中,`lambda`表达式常用于配合排序函数,实现灵活的数据排序。对于基本列表,可以直接使用`sorted()`进行升序或降序排序;处理复杂对象如字典列表时,通过`lambda`指定键值进行排序;同样地,`lambda`也适用于根据元组的不同位置元素来进行排序。
|
2天前
|
存储 数据挖掘 测试技术
Python接口自动化中操作Excel文件的技术方法
通过上述方法和库,Python接口自动化中的Excel操作变得既简单又高效,有助于提升自动化测试的整体质量和效率。
10 0

热门文章

最新文章

推荐镜像

更多