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

2024-02-04 03:12
文章标签 力扣 刷题 启程

本文主要是介绍力扣刷题之旅:启程篇(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      力扣(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

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

 

这篇关于力扣刷题之旅:启程篇(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/676215

相关文章

两数之和--力扣1

两数之和 题目思路C++代码 题目 思路 根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。 如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查

【每日刷题】Day113

【每日刷题】Day113 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 91. 解码方法 - 力扣(LeetCode) 2. LCR 098. 不同路径 - 力扣(LeetCode) 3. 63. 不同路径 II - 力扣(LeetCode) 1. 91. 解码方法 - 力扣(LeetCode) //思路:动态规划。 cl

力扣第347题 前K个高频元素

前言 记录一下刷题历程 力扣第347题 前K个高频元素 前K个高频元素 原题目: 分析 我们首先使用哈希表来统计数字出现的频率,然后我们使用一个桶排序。我们首先定义一个长度为n+1的数组,对于下图这个示例就是长度为7的数组。为什么需要一个长度为n+1的数组呢?假如说总共有三个数字都为1,那么我们需要把这个1放在数组下标为3的位置,假如说数组长度为n,对于这个例子就是长度为3,那么它的

hot100刷题第1-9题,三个专题哈希,双指针,滑动窗口

求满足条件的子数组,一般是前缀和、滑动窗口,经常结合哈希表; 区间操作元素,一般是前缀和、差分数组 数组有序,更大概率会用到二分搜索 目前已经掌握一些基本套路,重零刷起leetcode hot 100, 套路题按套路来,非套路题适当参考gpt解法。 一、梦开始的地方, 两数之和 class Solution:#注意要返回的是数组下标def twoSum(self, nums: Lis

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣3217, 82, 237

总结,删除链表节点问题使用到列表,哈希表,递归比较容易超时,我觉得使用计数排序比较稳,处理起来也不是很难。 1. 力扣3217:从链表中移除在数组中的节点 1.1 题目: 给你一个整数数组 nums 和一个链表的头节点 head。从链表中移除所有存在于 nums 中的节点后,返回修改后的链表的头节点。 示例 1: 输入: nums = [1,2,3], head = [1,2,3,

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

力扣接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2: 输入:height

每日一题,力扣leetcode Hot100之238.除自身以外数组的乘积

乍一看这个题很简单,但是不能用除法,并且在O(N)时间复杂度完成或许有点难度。 考虑到不能用除法,如果我们要计算输出结果位置i的值,我们就要获取这个位置左边的乘积和右边的乘积,那么我新设立两个数组L和R。 对于L来说,由于表达的是位置i左边的数的乘积,那么L[0]=1,因为第一个数字左边没数那么为了不影响乘积初始值就设置为1,那么L[1]=L[0]*nums[0],那么L[i]=L[i-1

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II 1.题目 1.1复原IP地址 题目链接:93. 复原 IP 地址 - 力扣(LeetCode) 视频讲解:回溯算法如何分割字符串并判断是合法IP?| LeetCode:93.复原IP地址_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0093.%E5%A4%8