首页 > 其他分享 >【Leetcode】解题报告Day1~Day2

【Leetcode】解题报告Day1~Day2

时间:2023-09-12 17:26:54浏览次数:45  
标签:stones nums int Day2 示例 List jewels Day1 Leetcode

解题报告

Day1

1. 2235.两数之和

给你两个整数 num1num2,返回这两个整数的和。

示例 1:

输入:num1 = 12, num2 = 5
输出:17
解释:num1 是 12,num2 是 5 ,它们的和是 12 + 5 = 17 ,因此返回 17 。

示例 2:

输入:num1 = -10, num2 = 4
输出:-6
解释:num1 + num2 = -6 ,因此返回 -6 。

提示:

  • -100 <= num1, num2 <= 100

初次解

class Solution:
    def sum(self, num1: int, num2: int) -> int:
        return num1 + num2

通过

2. 1929.数组串联

给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans ,数组下标 从 0 开始计数 ,对于所有 0 <= i < ni ,满足下述所有要求:

  • ans[i] == nums[i]
  • ans[i + n] == nums[i]

具体而言,ans 由两个 nums 数组 串联 形成。

返回数组 ans

示例 1:

输入:nums = [1,2,1]
输出:[1,2,1,1,2,1]
解释:数组 ans 按下述方式形成:
- ans = [nums[0],nums[1],nums[2],nums[0],nums[1],nums[2]]
- ans = [1,2,1,1,2,1]

示例 2:

输入:nums = [1,3,2,1]
输出:[1,3,2,1,1,3,2,1]
解释:数组 ans 按下述方式形成:
- ans = [nums[0],nums[1],nums[2],nums[3],nums[0],nums[1],nums[2],nums[3]]
- ans = [1,3,2,1,1,3,2,1]

提示:

  • n == nums.length
  • 1 <= n <= 1000
  • 1 <= nums[i] <= 1000

初次解

class Solution:
    def getConcatenation(self, nums: List[int]) -> List[int]:
        for i in range(len(nums)):
            nums.insert(len(nums)+i, nums[i])
        ans = nums
        return ans

思路

遍历数组加后边

但是感觉for应该没有必要

其他题解

官方解

class Solution:
    def getConcatenation(self, nums: List[int]) -> List[int]:
        nums.extend(nums)
        return nums

网友分享

class Solution:
    def getConcatenation(self, nums: List[int]) -> List[int]:
        return nums * 2

作者:int_64
链接:https://leetcode.cn/problems/concatenation-of-array/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

反省

  • 想复杂了

  • 忘记了extend和直接的*2甚至直接相加就行

    extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。

    Python List extend()方法

3. 0771.宝石与石头

给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

字母区分大小写,因此 "a""A" 是不同类型的石头。

示例 1:

输入:jewels = "aA", stones = "aAAbbbb"
输出:3

示例 2:

输入:jewels = "z", stones = "ZZ"
输出:0

提示:

  • 1 <= jewels.length, stones.length <= 50
  • jewelsstones 仅由英文字母组成
  • jewels 中的所有字符都是 唯一的

初次解

class Solution:
    def numJewelsInStones(self, jewels: str, stones: str) -> int:
        count = 0
        for i in jewels:
            count += stones.count(i)
        return count

思路

用了python List中的count()函数

遍历stones,分别用jewels中的元素寻找是否有一致的

其他题解

不用自带方法

class Solution:
    def numJewelsInStones(self, jewels: str, stones: str) -> int:
        count = 0
        for i in jewels:
            for j in stones:
                if i == j:
                    count += 1
        return count

官方解

# 暴力解
class Solution:
    def numJewelsInStones(self, jewels: str, stones: str) -> int:
        return sum(s in jewels for s in stones) # 生成器表达式
# 降低时间复杂度 使用哈希字符集
class Solution:
    def numJewelsInStones(self, jewels: str, stones: str) -> int:
        jewelsSet = set(jewels)
        return sum(s in jewelsSet for s in stones)

反省

  • 生成器表达式

    Python中的生成器表达式是一种紧凑的语法形式,用于创建生成器对象。生成器对象可以用于迭代,一次生成一个值,而不是一次性生成所有值,从而节省内存和提高效率。生成器表达式的语法类似于列表推导式,但使用()来定义,而不是[]

    (expression for item in iterable if condition)
    
    • expression:这是生成器要生成的值的表达式。
    • item:这是在每次迭代中从可迭代对象 iterable中取出的元素。
    • iterable:这是要迭代的可迭代对象,通常是列表、元组、集合、字符串等。
    • condition(可选):这是一个条件表达式,用于筛选哪些元素将被包括在生成器中。只有满足条件的元素才会生成。

    故上述代码意思为判断s是否在jewels中,其中s是从stones中取出来的,值为true的时候才会被sum函数计数

  • 集合的查找操作的平均时间复杂度是平均O(1),因为集合是基于哈希表(hash table)实现的数据结构。

    哈希表是一种高效的数据结构,用于存储和检索数据。

    它的工作原理是将每个元素映射到一个特定的位置(称为哈希桶)以进行快速查找。

    哈希表的平均查找时间是常数时间,这意味着无论哈希表中有多少元素,查找单个元素所需的时间大致相同。

Day2

1. 1480.一维数组的动态和

给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i])

请返回 nums 的动态和。

示例 1:

输入:nums = [1,2,3,4]
输出:[1,3,6,10]
解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。

示例 2:

输入:nums = [1,1,1,1,1]
输出:[1,2,3,4,5]
解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1] 。

示例 3:

输入:nums = [3,1,2,10,1]
输出:[3,4,6,16,17]

提示:

  • 1 <= nums.length <= 1000
  • -10^6 <= nums[i] <= 10^6

初次解

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

思路

直接从第二个开始前一项加本项

其他题解

官方解

class Solution:
    def runningSum(self, nums: List[int]) -> List[int]:
        n = len(nums)
        for i in range(1, n):
            nums[i] += nums[i - 1]
        return nums

2. 转换成小写字母

给你一个字符串 s ,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。

示例 1:

输入:s = "Hello"
输出:"hello"

示例 2:

输入:s = "here"
输出:"here"

示例 3:

输入:s = "LOVELY"
输出:"lovely"

提示:

  • 1 <= s.length <= 100
  • s 由 ASCII 字符集中的可打印字符组成

初次解

class Solution:
    def toLowerCase(self, s: str) -> str:
        t = ""
        for i in range(len(s)):
            if ord('A') <= ord(s[i]) <= ord('Z'):
                t += chr(ord(s[i]) + 32)
            else:
                t += s[i]
        return t

# 使用函数
class Solution:
    def toLowerCase(self, s: str) -> str:
        return s.lower()

思路

看ASCII码是否在AZ之间,是的话-32得到小写字母

其他题解

官方解

class Solution:
    def toLowerCase(self, s: str) -> str:
        return "".join(chr(asc | 32) if 65 <= (asc := ord(ch)) <= 90 else ch for ch in s) # 列表推导式

反省

  • 列表推导式

    和生成器表达式的语法类似,但使用[]来定义,而不是()

  • :=

    asc := ord(ch)中它将计算ord(ch)的结果并将其赋值给asc变量。该运算符可以在表达式阶段就赋值

3. 最富有客户的资产总量

给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量

客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。

示例 1:

输入:accounts = [[1,2,3],[3,2,1]]
输出:6
解释:
第 1 位客户的资产总量 = 1 + 2 + 3 = 6
第 2 位客户的资产总量 = 3 + 2 + 1 = 6
两位客户都是最富有的,资产总量都是 6 ,所以返回 6 。

示例 2:

输入:accounts = [[1,5],[7,3],[3,5]]
输出:10
解释:
第 1 位客户的资产总量 = 6
第 2 位客户的资产总量 = 10 
第 3 位客户的资产总量 = 8
第 2 位客户是最富有的,资产总量是 10

示例 3:

输入:accounts = [[2,8,7],[7,1,3],[1,9,5]]
输出:17

提示:

  • m == accounts.length
  • n == accounts[i].length
  • 1 <= m, n <= 50
  • 1 <= accounts[i][j] <= 100

初次解

class Solution:
    def maximumWealth(self, accounts: List[List[int]]) -> int:
        m_w = 0
        for i in accounts:
            w = 0
            for j in i:
                w += j
            if w > m_w:
                m_w = w
        return m_w

思路

遍历二维数组,在每一行做加法得到的值和max作比较,更大就替换,最后输出

其他题解

官方解

class Solution:
    def maximumWealth(self, accounts: List[List[int]]) -> int:
        return max(map(sum, accounts))

反省

  • map()会根据提供的函数对指定序列做映射

    map(function, iterable, ...)
    

标签:stones,nums,int,Day2,示例,List,jewels,Day1,Leetcode
From: https://www.cnblogs.com/ryukirin/p/17697267.html

相关文章

  • LeetCode 1934.确认率
    1934.确认率1.问题关键精炼:确认率是confirmed消息的数量除以请求的确认消息的总数。没有请求任何确认消息的用户的确认率为0。确认率四舍五入到小数点后两位2.难点解析:我觉得这道题是考察AVG函数的使用。根据需求可以看出,答案也就是一个公式:confirmed消息的数量/总......
  • Java(day11):顺序结构
    前言Java编程语言是一种面向对象的编程语言。该语言提供了许多特性,包括抽象类、接口、多态、封装、继承、泛型等等。Java编写的代码通常被称为Java应用程序,可以在各种计算机平台上运行。本文将介绍Java的顺序结构,该结构是Java代码中最基本的结构之一。顺序结构指的是按照指定的顺......
  • leetcode841钥匙和房间
    使用深度优先遍历构造的图,只要访问过就标记已访问intnum=0;vector<bool>vis;voiddfs(vector<vector<int>>&rooms,intx){vis[x]=true;num++;for(auto&v:rooms[x]){if(!vis[v])dfs(rooms,v);//说明这个房间没有进去过,所以可以访问}}intmai......
  • leetcode450删除搜索二叉树的节点
    删除的二叉树节点分4种情况:叶子节点,直接删除就行左节点不为空,右节点为空;直接将左子树返回左节点为空,右节点不为空;直接将右子树返回左节点和右节点不为空;将右子树最小的节点作为根节点,返回右子树TreeNode*deleteNode(TreeNode*root,intkey){if(!root)returnn......
  • Leetcode 26. 删除有序数组中的重复项
    题目描述给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。双指针Python实现defremoveDuplicates(nums:List[int])->int:......
  • LeetCode523——连续的子数组和
    给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:子数组大小 至少为2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。如果存在一个整数 n ,令整数 x 符合 x=n*k ,则称 x 是 ......
  • LeetCode59.螺旋矩阵II
    LeetCode59.螺旋矩阵IIhttps://leetcode.cn/problems/spiral-matrix-ii/学习内容螺旋矩阵题,就是给你一个矩阵的长度n,去返回一个螺旋表示的二维数组。如n=3时,返回的二维数组为:123894765解题的关键点,是考虑边界上的点怎么处理,通过遍历圈数+遍历每个边来输出二维数组。当每次转圈时......
  • CS自学day2
    (ps补充:scanf这个函数是c语言自带的但是在vs中会报错或者产生警告,这边解决方法有两种一就是上一篇说的使用scanf_s但是注意,此种方法的跨平台性和可移植性降低了也就是说解决的是燃煤之急但是不是根本原因哈,所以推荐第二种方法就是在源文件中的第一行敲#define_CRT_SECURE_NO_WARNING......
  • #yyds干货盘点# LeetCode程序员面试金典:基本计算器 II
    题目:给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。你可以假设给定的表达式总是有效的。所有中间结果将在 [-231,231 -1] 的范围内。注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。 示例1:输入:s=......
  • #yyds干货盘点# LeetCode程序员面试金典:字符串相加
    1.简述:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。 示例1:输入:num1="11",num2="123"输出:"134"示例2:输入:num1="456",num2=......