刷题系列博客链接:机试题目

目录

题目及示例

我的题解


题目及示例

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

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

示例:

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

提示:

1 <= arr.length <= 10^4
1 <= arr[i] <= 10^5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/replace-elements-with-greatest-element-on-right-side
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的题解

刚开始就是用了循环和小循环部分选择排序,找出最大值填上。效率很慢。代码如下。图是后来截的图,56ms的是后面的优化代码,其实也就两行。

/*** 刚开始,暴力,没有优化,效率差,几百ms*/
int* replaceElements(int* arr, int arrSize, int* returnSize){*returnSize = arrSize;int max , i, j;for(i = 0; i < arrSize; ++i){max = -1;for(j = i + 1; j < arrSize; ++j){if(arr[j] > max){max=arr[j];}}arr[i] = max;}return arr;
}

这么低的效率,C的14%,把我惊呆了,通过看规律,发现有时候后面最大值是好几个一样的,于是用maxl变量把最大值位置记下来,到它之前,max都不用重新选,直接用,类似于“剪枝”。代码如下,提交之后我又惊呆了,直接C的100%,Good !

/*** 加入优化思想,用常数级的空间换取时间*/
int* replaceElements(int* arr, int arrSize, int* returnSize){*returnSize = arrSize;int max , maxl = -1, i, j;for(i = 0; i < arrSize; ++i){if(i+1 > maxl){ //超过才重新选maxmax = -1;for(j = i + 1; j < arrSize; ++j){if(arr[j] > max){max  = arr[j];maxl = j; //记下位置,“剪枝”}}}arr[i] = max;}return arr;
}

后来看了官方题解,发现逆序遍历填数也是很快的,1ms代码,Java超100%。

class Solution {public int[] replaceElements(int[] arr) {int[] target = new int[arr.length];target[arr.length - 1] = -1;int max = arr[arr.length - 1];for (int i = arr.length - 2; i >= 0; i--) {target[i] = max;if(arr[i] > max) {max = arr[i];}}return target;}
}

力扣题目系列:1299. 将每个元素替换为右侧最大元素 -- 一道算法优化入门题相关推荐

  1. 1299. 将每个元素替换为右侧最大元素

    2020-04-21 1.题目描述 将每个元素替换为右侧最大元素 2.题解 从后往前进行遍历,求出最大值即可. 3.题解 class Solution { public:vector<int&g ...

  2. LeetCode简单题之将每个元素替换为右侧最大元素

    题目 给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换. 完成所有替换操作后,请你返回这个数组. 示例 1: 输入:arr = [17,18,5,4,6 ...

  3. leetcode1299. 将每个元素替换为右侧最大元素

    给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换. 完成所有替换操作后,请你返回这个数组. 示例: 输入:arr = [17,18,5,4,6,1] 输 ...

  4. 力扣题目——230. 二叉搜索树中第K小的元素

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查 ...

  5. 力扣题目——429. N 叉树的层序遍历

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个 N 叉树,返回其节点值的层序遍历.(即从左到右,逐层遍历). 树的 ...

  6. 力扣题目——637. 二叉树的层平均值

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例: 输入: ...

  7. 力扣题目——103. 二叉树的锯齿形层序遍历

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个二叉树,返回其节点值的锯齿形层序遍历.(即先从左往右,再从右往左进行 ...

  8. 力扣题目——107. 二叉树的层序遍历 II

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个二叉树,返回其节点值自底向上的层序遍历. (即按从叶子节点所在层到根 ...

  9. 《LeetCode力扣练习》剑指 Offer 05. 替换空格 Java

    <LeetCode力扣练习>剑指 Offer 05. 替换空格 Java 一.资源 题目: 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输 ...

  10. 基本算法总结,力扣题目整理

    系统性学习算法,扎实您的打码基本功! 作为算法初学者的我从19年8月份开始在力扣学习算法,到现在AC了700多道题目. 随着打卡题目数量的增多,我发现算法常见考察的知识点大概有十几种,包括:二分,滑动 ...

最新文章

  1. django引入现有数据库
  2. 淘宝技术发展(Java时代:脱胎换骨)
  3. PHP常用方法很有意义的博客网址
  4. VSDX Annotator for mac(Visio 绘图工具)
  5. oracle数据库基本语句
  6. pandas DataFrame方法;dataframe 定义一个数值全为1的列;dataframe创建多列;如何拆分嵌套list存为dataframe;在数据集添加一个新的列
  7. HP CQ40-512TX不刷BIOS安装XP系统
  8. ❤️爆肝十二万字《python从零到精通教程》,从零教你变大佬❤️(建议收藏)
  9. 英国告急!无油可售!加油站大排长龙 | 经济学人早报精选
  10. easyui datagrid deleteRow(删除行)的BUG
  11. CEPH告警:health_warn 45 pgs degraded;60 pgs unclean; 45 pgs undersized
  12. 锐龙R3 2200G和Intel i3-8100选哪个好
  13. STM32F103ZET6如何驱动DS18B20温度传感器
  14. Towards Poisoning of Deep Learning Algorithms with Back-gradient Optimization
  15. 【Android】【UI】解决DialogFragment反复使用引起的并发问题和状态错误问题
  16. SMB2协议特性之oplock与lease(下
  17. 量化研究 | CTA择时出场策略指南大全
  18. 袋鼠云技术荟 | 某客户生产服务器CPU负载异常处理
  19. 【网络安全】新型网络犯罪攻防技术研究
  20. 函数的梯度方向和切线方向_方向导数和梯度是什么?

热门文章

  1. MyBatis实现模糊查询的几种方式
  2. JavaWeb之JSP技术总结
  3. Redis复制与可扩展集群搭建
  4. 关于NDK及安装使用
  5. live555源码编译(win7+vs2010)
  6. CURL模拟访问网页
  7. 基于麻雀算法改进的随机森林分类算法 - 附代码
  8. python调用sklearn库BP神经网络基于小样本进行痘痘预测尝试
  9. VC6.0无法进入调试
  10. IDEA中如何将springboot项目打包成war包,部署在tomcat中