栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【python】力扣刷题笔记(一)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【python】力扣刷题笔记(一)

1.两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashmap = {}
        for i in range(len(nums)): # 一边将 nums 中的元素加入 hashmap 中,一边判断差值是否在 hashmap 中
              d_value = target - nums[i] # 差值
              if d_value in hashmap:
              return [hashmap[d_value], i]
        hashmap[nums[i]] = i # 保证 key 不重复,需要先判断后加入

(1)Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。
(2)Python len() 方法返回对象(字符、列表、元组等)长度或项目个数。

2.两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        // 初始化个位节点,先不做进位
        newPoint = ListNode(l1.val + l2.val)
        // rt用来作为最后return的节点,tp用来遍历节点
        rt, tp = newPoint, newPoint
        // l1,l2只要后面还有节点,就继续往后遍历;或者新链表还需要继续往后进位
        while (l1 and (l1.next != None)) or (l2 and (l2.next != None)) or (tp.val > 9):
            l1, l2 = l1.next if l1 else l1, l2.next if l2 else l2
            tmpsum = (l1.val if l1 else 0) + (l2.val if l2 else 0)
            // 计算新链表下个节点的值(当前节点的进位+当前l1 l2的值之和),先不做进位
            tp.next = ListNode(tp.val//10 + tmpsum)
            // 新链表当前节点的值取个位
            tp.val %= 10
            // 新链表往后便利一个节点
            tp = tp.next
        return rt

(1) l1 = l1.next if l1 else l1
eg.max_value = x if x > y else y 等同于 若x > y,则max_value = x,否则:max_value = y
(2) tp.val//10
单斜杠(/)表示除法,且不管除数和被除数是不是整数,最后结果都是float类型
双斜杠(//)表示地板除,即先做除法(/),然后向下取整(floor)(不大于x的最大整数,如-3//2=-2)。至少有一方是float型时,结果为float型;两个数都是int型时,结果为int型

1523.在区间范围内统计奇数数目

给你两个非负整数 low 和 high 。请你返回 low 和 high 之间(包括二者)奇数的数目。

class Solution:
    def countOdds(self, low: int, high: int) -> int:
        return (high+1)//2-low//2
1491.去掉最低工资和最高工资后的工资平均值

给你一个整数数组 salary ,数组里每个数都是 唯一 的,其中 salary[i] 是第 i 个员工的工资。
请你返回去掉最低工资和最高工资以后,剩下员工工资的平均值。

class Solution:
    def average(self, salary: List[int]) -> float:
        return (sum(salary)-max(salary)-min(salary))/(len(salary)-2)

(1)max() 方法返回给定参数的最大值,参数可以为序列。
(2)min() 方法返回给定参数的最小值,参数可以为序列。
(3)sum() 方法对序列进行求和计算。

167.两数之和 II - 输入有序数组

给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。
以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。
你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。
你所设计的解决方案必须只使用常量级的额外空间。

class Solution: #双指针
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
         i = 0
         j=len(numbers)-1
         while itarget:
                 j=j-1
             else:
                 i=i+1
         return null
class Solution: #二分查找
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        n = len(numbers)
        for i in range(n):
            low, high = i + 1, n - 1
            while low <= high:
                mid = (low + high) // 2
                if numbers[mid] == target - numbers[i]:
                    return [i + 1, mid + 1]
                elif numbers[mid] > target - numbers[i]:
                    high = mid - 1
                else:
                    low = mid + 1
        return [-1, -1]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/740559.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号