1299. 将每个元素替换为右侧最大元素(简单)- LeetCode

news/2024/7/1 20:41:55 标签: leetcode, 算法, python, 列表

在这里插入图片描述
注意这里的右边不包括该位置上的元素。

自己解法:动态规划

设新列表为res,原列表为arr,初始状态为:

  • res[-1] = -1
  • res[-2] = arr[-1]

下标从len(arr) - 2递减至0,转移方程为:

python">if arr[i+1] > res[i+1]:
	res[i] = arr[i+1]
else:
	res[i] = res[i+1]

Python实现:

python">class Solution:
    def replaceElements(self, arr: List[int]) -> List[int]:
        if len(arr) == 1:
            return [-1]
        elif len(arr) == 2:
            arr[-2] = arr[-1]
            arr[-1] = -1
            return arr
        else:
            res = [0] * len(arr)
            res[-2] = arr[-1]
            res[-1] = -1
            for i in reversed(range(len(arr)-2)):
                if arr[i+1] > res[i+1]:
                    res[i] = arr[i+1]
                else:
                    res[i] = res[i+1]
            return res

时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( n ) O(n) O(n),运行结果:
在这里插入图片描述
改进:不用新开列表,用一个变量temp存储当前位置的元素,在原列表上修改,把空间复杂度降为 O ( 1 ) O(1) O(1),代码为:

python">class Solution:
    def replaceElements(self, arr: List[int]) -> List[int]:
        if len(arr) == 1:
            return [-1]
        elif len(arr) == 2:
            arr[-2] = arr[-1]
            arr[-1] = -1
            return arr
        else:
            temp = arr[-2]
            s = 0
            arr[-2] = arr[-1]
            arr[-1] = -1
            for i in reversed(range(len(arr)-2)):
                if temp > arr[i+1]:
                    s = arr[i]
                    arr[i] = temp
                    temp = s
                else:
                    temp = arr[i]
                    arr[i] = arr[i+1]
            return arr

在这里插入图片描述

自己解法:Python切片

利用max函数和切片可以直接得出结果,但时间效果不好

python">class Solution:
    def replaceElements(self, arr: List[int]) -> List[int]:
        for i in range(len(arr)-1):
            arr[i] = max(arr[i+1:])
        arr[-1] = -1
        return arr

在这里插入图片描述

官方解法

与我的第一种解法一样,也是倒序比较,参考:https://leetcode-cn.com/problems/replace-elements-with-greatest-element-on-right-side/solution/


http://www.niftyadmin.cn/n/1701552.html

相关文章

linux设备模型:扩展篇

Linux设备模型组件:总线 一、定义:总线是不同IC器件之间相互通讯的通道;在计算机中,一个总线就是处理器与一个或多个不同外设之间的通讯通道;为了设备模型的目的,所有的设备都通过总线相互连接,甚至当它是一个内部的虚拟总线(如,platform总线);例如,设备模型表示在…

十分钟掌握Nodejs下载和安装

Nodejs安装教程 第一步:下载node.js 第一步:到node官网下载node.js 1、下载官网推荐的版本,网址:https://nodejs.org/en/download/ 第二步:根据需要选择自己需要的版本 1、网址:https://nodejs.org/do…

python之redis和memcache操作

Redis 教程 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。它支持字符串、哈…

《Python编程:从入门到实践》第十章笔记

10.1 从文件中读取数据 10.1.1 读取整个文件 先创建一个文件,包含精确到小数点后30位的圆周率值,且在小数点后每10位处都换行: 3.141592653589793238462643383279下面的程序打开并读取这个文件,再将其内容显示在屏幕上&#xf…

Citrx XenDesktop 7 实施二 安装XenServer

安装XenServer. XenServer 是基本,虽然,我们可以把XenDesktop 安装在ESXI和Hyper-V上面.但是,兼容性还有便捷性,都没有在XenServer上面好.所以,虽然我自己也很不喜欢XenServer.但是,考虑到这些.还是老老实实的安装吧.1.说心里话,我最不想写的就是关于系统安装之类的东西.觉得特…

Python之路,Day26-----暂无正在更新中

Python之路,Day26-----暂无正在更新中 转载于:https://www.cnblogs.com/weiman3389/p/6222631.html

利用正则过滤各种标签,空格,换行符的代码

收集php利用正则过滤各种标签&#xff0c;空格&#xff0c;换行符的代码&#xff1a; 查看代码 打印01$strpreg_replace("/\s/", " ", $str); //过滤多余回车02$strpreg_replace("/<[ ]/si","<",$str); //过滤<__("<…

1160. 拼写单词(简单)- LeetCode

题目描述 自己解法 由题意可知&#xff0c;字母的顺序并不重要&#xff0c;只需要比较词汇表每个字符串中的每个字符的数目与字母表中字符的数目即可&#xff0c;使用哈希表即可求解&#xff0c; Python3代码&#xff1a; class Solution:def countCharacters(self, words: L…