力扣(LeetCode)算法题解:1299. 将每个元素替换为右侧最大元素

简介: 力扣(LeetCode)算法题解:1299. 将每个元素替换为右侧最大元素

(一)题目描述

给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换。

完成所有替换操作后,请你返回这个数组。

来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

(二)输入、输出示例

示例 1:

输入:arr = [17,18,5,4,6,1]
输出:[18,6,6,6,1,-1]

(三)代码实现

方法1(php版):

解题思路

1.既然需要找到每个元素右侧的最大值,肯定需要遍历1次。

2.如果正序来查找,那判断你右侧最大值的时候也需要遍历n-1次。那就是o(n²)的时间复杂度

3.本题技巧在于从后往前查找。默认max是最大值,从后往前遍历,判断每个元素是否比最大值大,如果是则交换;若否则继续遍历。

4.顺带考察了如果交换两个数的值。

代码实现

class Solution {
    /**
     * @param Integer[] $arr
     * @return Integer[]
     */
    function replaceElements($arr) {
        $max = -1;
        for ($k = count($arr)-1; $k >=0 ; $k--){
            $temp = $arr[$k];
            $arr[$k] = $max; // 将右侧的最大值赋值给当前元素
            if($temp > $max){
              // 更新最大值
                $max = $temp;
            }
        }
        return $arr;
    }
}

(四)性能分析

运行时间 内存消耗
8ms 14.8 MB
目录
相关文章
|
3月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
4月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
47 2
|
4月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
51 1
|
4月前
【LeetCode 27】347.前k个高频元素
【LeetCode 27】347.前k个高频元素
52 0
|
4月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
41 0
|
4月前
【LeetCode-每日一题】移除元素
【LeetCode-每日一题】移除元素
40 0
|
4月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
58 0
|
6月前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
103 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
6月前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
6月前
|
算法 索引
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
这篇文章介绍了LeetCode第34题"在排序数组中查找元素的第一个和最后一个位置"的解题方法,通过使用双指针法从数组两端向中间同时查找目标值,有效地找到了目标值的首次和最后一次出现的索引位置。
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置