Grind75第2天 | 238.除自身以外数组的乘积、75.颜色分类、11.盛最多水的容器

238.除自身以外数组的乘积

题目链接:https://leetcode.com/problems/product-of-array-except-self

解法:

这个题有follow up, 要求优化到空间复杂度为O(1),所以给出baseline和follow up的解法。

Baseline:利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀与后缀)相乘得到答案。因此需要两个列表:L 和 R,对于nums中的索引i,L[i] 表示索引i左侧所有数字的乘积,R[i] 表示索引i右侧所以数字的乘积,那么L[i] * R[i] 就是除自身以外数组的乘积。

空间复杂度为O(n)

Follow up:根据表格的主对角线(全为 1 ),可将表格分为 上三角 和 下三角 两部分。分别迭代计算下三角和上三角两部分的乘积。

空间复杂度为O(1)

参考题解:上三角和下三角

边界条件:无

时间复杂度:O(n)

空间复杂度:

# 空间复杂度 O(n)
class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        length = len(nums)
        L, R = [1] * length, [1] * length
        res = [1] * length

        for i in range(1, length):
            L[i] = L[i-1] * nums[i-1]
        
        for i in range(length-2, -1, -1):
            R[i] = R[i+1] * nums[i+1]

        for i in range(length):
            res[i] = L[i] * R[i]

        return res
# 空间复杂度 O(1)
class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        length = len(nums)
        res = [1] * length
        temp = 1

        for i in range(1, length):
            res[i] = res[i-1] * nums[i-1]
        
        for i in range(length-2, -1, -1):
            temp *= nums[i+1]
            res[i] *= temp

        return res

75.颜色分类

题目链接:https://leetcode.com/problems/sort-colors

解法:

注意这个题要求原地修改,还有follow up要求只能扫描一次。

Baseline:baseline的解法是统计0,1,2三个元素的个数,然后在原数组中修改。需要扫描两次。

Follow up:使用三个指针:i,j,k。[0, i) 区间都是0,[i, j) 都是1,[k+1, length-1]都是2,如下图所示。

初始化时,让0和2的区间都为空,那么i初始化为0,k初始化为length-1。

如果nums[j] = 0,由于 nums[i]是位于1的区间的,那么需要交换,交换后[0, i+1)是0区间了,[i+1, j+1) 是1区间了,所以i和j都得加1。

如果nums[j] = 2,由于那么和 nums[k] 进行交换,交换后,[k, length)是新的2区间了,所以k需要减1。而交换之前的nums[k]不知道是什么数值,不一定是1,所以j不用加1。

如果nums[j] = 1,那么j直接加1就行。

如此,直到 j 大于 k,终止。

参考题解:75. 颜色分类 | 手写图解版思路 + 代码讲解_哔哩哔哩_bilibili

边界条件:无

时间复杂度:O(n)

空间复杂度:O(1)

# baseline
class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        count = [0] * 3
        for i in nums:
            count[i] += 1
        
        for i in range(len(nums)):
            if i < count[0]:
                nums[i] = 0
            elif i < count[0] + count[1]:
                nums[i] = 1
            else:
                nums[i] = 2
# 扫描一次
class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        length = len(nums)
        if length < 2:
            return

        zero = 0
        two = length - 1
        i = 0
        # 遵循左闭右开的写法
        while i <= two:
            if nums[i] == 0:
                nums[i], nums[zero] = nums[zero], nums[i]
                zero += 1
                i += 1
            elif nums[i] == 1:
                i += 1
            else:
                nums[i], nums[two] = nums[two], nums[i]
                two -= 1

11.盛最多水的容器

题目链接:https://leetcode.com/problems/container-with-most-water

解法:

这个题用双指针。基本的思路是,双指针为i和j,容器的盛水量由短板决定 min(h[i], h[j]) * (j - i)。双指针从两端往中间移动,移动的过程中,(j - i)一定是变小的,那么为了得到更大的容积,就需要短板变大,所以只能移动短板。到两个指针相遇时,停止。

参考题解:双指针

边界条件:无

时间复杂度:O(n)

空间复杂度:O(1)

class Solution:
    def maxArea(self, height: List[int]) -> int:
        i, j, res = 0, len(height) - 1, 0
        while i < j:
            if height[i] < height[j]:
                res = max(res, height[i] * (j - i))
                i += 1
            else:
                res = max(res, height[j] * (j - i))
                j -= 1
        return res

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/299334.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络报文分析程序的设计与实现(2024)

1.题目描述 在上一题的基础上&#xff0c;参照教材中各层报文的头部结构&#xff0c;结合使用 wireshark 软件&#xff08;下载地址 https://www.wireshark.org/download.html#releases&#xff09;观察网络各层报文捕获&#xff0c;解析和分析的过程&#xff08;如下 图所示&a…

SpringBoot+Redis实现接口防刷功能

场景描述&#xff1a; 在实际开发中&#xff0c;当前端请求后台时&#xff0c;如果后端处理比较慢&#xff0c;但是用户是不知情的&#xff0c;此时后端仍在处理&#xff0c;但是前端用户以为没点到&#xff0c;那么再次点击又发起请求&#xff0c;就会导致在短时间内有很多请求…

FCN-8s源码理解

FCN网络用于对图像进行分割&#xff0c;由于是全卷积网络&#xff0c;所以对输入图像的分辨率没有要求。本文重点对fcn8s.py中图像降采样和上采样后图像分辨率的变换进行理解。 相关知识 为准确理解图像分辨率的变换&#xff0c;对网络结构中影响图像分辨率变换的几个函数进行…

leetcode:3. 无重复字符的最长子串

一、题目 二、函数原型 int lengthOfLongestSubstring(char* s) 三、思路 本题就是找最长的无重复字符子串。 两层循环&#xff0c;外层循环控制字串的起始位置&#xff0c;内层循环控制字串的长度。 设置一个长度为256且初始为0的hash表&#xff08;因为一共有256个字符…

windows----Vmware虚拟机安装ubuntu

双系统来回切有点麻烦&#xff0c;还是安装虚拟机先整个简单的。 1 安装Vmware17虚拟机 虚拟机下载网址&#xff0c;一直下一步就行&#xff0c;更新和加入计划关闭 秘钥&#xff1a;MC60H-DWHD5-H80U9-6V85M-8280D 2 下载ubantu镜像 浙大镜像&#xff0c;自己选择版本吧&a…

灰色关联分析

&#xff08;相关性分析&#xff09;反映关系有多么紧密 “在系统发展过程中&#xff0c;若两个因素变化的趋势具有一致性&#xff0c;即同步变化程度较高&#xff0c;即可谓二者关联程度较高&#xff1b;反之&#xff0c;则较低。因此&#xff0c;灰色关联分析方法&#xff0…

STM32 ADC采样调试笔记

最近在搞STM32L051系列一个小MCU&#xff0c;要用这个去采集两路ADC作为输入。期间也碰到过一些问题&#xff0c;顺便记录下。 ADC采集原理不说了&#xff0c;主要采集电压&#xff0c;用数字进行细分&#xff0c;这样就可以知道输入电压多少了&#xff0c;网上也有很多相关文…

Spark中的二分类与多分类问题的解决

机器学习中的分类问题是数据科学中的一个重要领域&#xff0c;而在大数据环境中使用Apache Spark来解决二分类和多分类问题可以更好地处理大规模数据。本文将深入探讨如何使用Spark来解决二分类和多分类问题&#xff0c;包括数据准备、模型选择和性能评估等方面。 二分类问题 …

dnSpy调试工具二次开发1-新增菜单

测试环境&#xff1a; window 10 visual studio 2019 版本号&#xff1a;16.11.15 .net framework 4.8 开发者工具包 下载 .NET Framework 4.8 | 免费官方下载 .net 5开发者工具包 下载 .NET 5.0 (Linux、macOS 和 Windows) 利用git拉取代码(源码地址&#xff1a;Gi…

入库和出库的成本对不上如果如何解决

入库是前期手工录入的车价是对的&#xff0c;出库是根据销售出库单生成的 入库成本和出库成本不一致的解决方法 解决方法&#xff1a; 整车管理——正车库存——库存核算——整车出库 成本核算

Marvelous Designer 各版本安装指南

Marvelous Designer下载链接 https://pan.baidu.com/s/1ZZCraq6w2Z4JPisND8q0jA?pwd0531 1.鼠标右击【Marvelous Designer 12(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 Marvelous Designer 12(64bit)】。 2.打开解压后的…

深入了解 RDD

深入了解 RDD 案例 明确需求&#xff1a; 在访问日志中&#xff0c;统计独立IP数量 TOP10 查看数据结构&#xff1a; IP&#xff0c;时间戳&#xff0c;Http&#xff0c;Method&#xff0c;Url…… 明确编码步骤 取出IP&#xff0c;生成一个只有IP的数据集简单清洗统计IP出现…

【小沐学CAD】开源Assimp库导入三维模型(C++、Python)

文章目录 1、简介2、下载编译3、代码测试3.1 C3.2 pyassimp&#xff08;Python&#xff09; 结语 1、简介 https://github.com/assimp/assimp Open Asset Import Library 是一个库&#xff0c;用于将各种 3D 文件格式加载为共享的内存格式。它支持 40 多种用于导入的文件格式和…

openssl3.2 - 编译

文章目录 openssl3.2 - 编译概述OpenSSL源码下载编译目标如何编译前置环境 - perl前置环境 - VS前置环境 - NASM快速编译步骤编译 - Quick startInstall PerlInstall NASMUse Visual Studio Developer Command Prompt with administrative privilegesFrom the root of the Open…

I.MX6ULL开发笔记(二)——硬件外设操作

0x01 点亮第一个RGB灯 在文章http://t.csdnimg.cn/EGWt9中有介绍Linux下文件目录&#xff0c;那么在Linux系统下&#xff0c;RGB灯也是一个设备&#xff0c;所以我们需要到/sys目录下去操作这个设备。 之后&#xff0c;我们进入到class目录&#xff0c;这里挂载着开发板上的外…

关于一个热成像仪的总结(一)硬件篇电源电路

1、电源部分 电源部分电路原理是这样的通过3.7V的锂电池供电&#xff0c;用Type-C选用TP4056作为充电电路给电池充电。使用MP2161开关电源作为5转3.3V 电源为MCU供电。 1-1电池 待定 1-2充电管理芯片TP4056 参考datasheet&#xff1a;https://atta.szlcsc.com/upload/publi…

[蓝桥杯学习] 线段树

学习blibli 定义 线段树是一种特殊的平衡二叉查找树&#xff0c;使用线段树&#xff0c;可以实现数据的添加、查找和删除。 树的根结点表示了一个完整的单元区间&#xff0c;左右孩子的区间是将父结点的区间进行二分&#xff0c;左右孩子的区间之和&#xff0c;就是他们的根…

studio3T mongodb 根据查询条件更新字段 或 删除数据

1. mongodb 等于、不等于$ne、不包含 $nin 以及批量更新数据的使用。 业务场景&#xff1a; 在集合中&#xff0c;根据查询条件&#xff0c;更新数据状态。 实现代码&#xff1a; 1. 部门名称为XXX、状态不等于“完好”的、并且不包含这些编码的数据先查询出来2. 再把状态更…

基于Java+SSM+JSP实现全功能电子商城

&#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩项目推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 基于SpringBoot的旅游网站 基于SpringBoot的MusiQ音乐网站 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及…

解决Android AAPT: error: resource android:attr/lStar not found. 问题

错误信息 /xxx/gjc/.gradle/caches/transforms-2/files-2.1/930c42acd29d295ce5bc495c3b84423e/core-1.9.0/res/values/values.xml:104:5-113:25: AAPT: error: resource android:attr/lStar not found. not found 资源位置 场景 原Android studio中的项目都是在git上面拉的老项…