力扣刷题之旅:启程篇(二)

      力扣(LeetCode)是一个在线编程平台,主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目,以及它们的解题代码。   

--点击进入刷题地址 


1.最后得到的余数

题目描述

        给定两个非空字符串 nums1 和 nums2,编写一个函数来实现将 nums2 不断整除以 nums1 并返回余数,直到余数为 0。返回最后得到的余数。

示例
给定 nums1 = "10", nums2 = "4"  
  
输出 0  
解释:4 ÷ 10 = 0 余 0
代码: 
def divide(nums1: str, nums2: str) -> int:  
    dividend = int(nums2)  # 被除数  
    divisor = int(nums1)  # 除数  
    remainder = dividend  # 余数初始为被除数  
    while remainder >= divisor:  # 当余数大于等于除数时,继续相除  
        temp = divisor  # 临时保存除数,以便更新被除数和余数  
        dividend = remainder  # 被除数更新为余数  
        remainder = dividend % temp  # 余数更新为被除数除以临时保存的除数的余数  
    return remainder  # 返回余数

小结:

  • 最后得到的余数:这道题考察了如何通过整除操作来计算两个数的余数。我们使用一个循环来不断更新被除数和余数,直到余数为0。

2.反转链表 

题目描述

给定一个链表,反转链表并返回新的头节点。

示例
输入:1->2->3->4->null  
输出:4->3->2->1->null
代码: 
class ListNode:  
    def __init__(self, val=0, next=None):  
        self.val = val  # 节点值  
        self.next = next  # 下一个节点指针  
          
def reverseList(head: ListNode) -> ListNode:  
    prev = None  # 用于保存上一个节点,初始值为 None 表示反转前的链表没有节点(空链表)  
    curr = head  # 当前节点指针,初始指向链表的头部(第一个节点)  
    while curr:  # 当当前节点不为空时,进行反转操作  
        next_node = curr.next  # 保存下一个节点,以便反转后连接链表  
        curr.next = prev  # 将当前节点的下一个节点指向上一个节点,实现反转操作  
        prev = curr  # 上一个节点更新为当前节点,准备处理下一个节点  
        curr = next_node  # 当前节点更新为下一个节点,继续处理下一个节点(直到链表结束)  
    return prev  # 返回反转后的链表的头部(最后一个节点)作为新的头节点(反转前是第一个节点)

小结:

  • 反转链表:这道题考察了如何通过修改链表的指针来反转链表。我们使用两个指针,一个指向当前节点,另一个保存上一个节点,通过修改指针关系实现链表反转。

 3.盛最多水的容器

题目描述: 

        给你 n 个非负整数 a1,a2,...,an,每个数代表一个坐标点 (i, ai)。在坐标内画 n 条垂直线,使得 i 垂直线的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴构成的容器可以容纳最多的水。 

解题思路:

        对于每个坐标点 i,计算以该点为顶点的矩形容器的面积 S = min(ai, a(n-i+1)) * i。其中 min(ai, a(n-i+1)) 表示容器的宽度,i 表示容器的长度。最后返回 S 的最大值即可。

代码实现:
def max_area(height):  
    max_area = 0  
    left = 0  
    right = len(height) - 1  
    while left < right:  
        area = min(height[left], height[right]) * (right - left)  
        if area > max_area:  
            max_area = area  
        if height[left] < height[right]:  
            left += 1  
        else:  
            right -= 1  
    return max_area

        在这个实现中,我们使用双指针来维护容器的左右边界。左指针指向数组的起始位置,右指针指向数组的末尾位置。我们计算以左右指针为边界的矩形容器的面积,则更新最大面积的值,最后返回最大面积即可。

 

你可能感兴趣的:(数据结构,python,算法,leetcode,链表)