1671 得到山行数组的最少删除次数(贪心+二分)

news/2024/11/20 14:21:48/

题目

1671
我们定义 arr 是 山形数组 当且仅当它满足:

arr.length >= 3
存在某个下标 i (从 0 开始) 满足 0 < i < arr.length - 1 且:
arr[0] < arr[1] < … < arr[i - 1] < arr[i]
arr[i] > arr[i + 1] > … > arr[arr.length - 1]
给你整数数组 nums​ ,请你返回将 nums 变成 山形状数组 的​ 最少 删除次数。

示例 1:

输入:nums = [1,3,1]
输出:0
解释:数组本身就是山形数组,所以我们不需要删除任何元素。
示例 2:

输入:nums = [2,1,1,5,6,2,3,1]
输出:3
解释:一种方法是将下标为 0,1 和 5 的元素删除,剩余元素为 [1,5,6,3,1] ,是山形数组。

提示:

3 <= nums.length <= 1000
1 <= nums[i] <= 109
题目保证 nums 删除一些元素后一定能得到山形数组。

题解

class Solution {public int minimumMountainRemovals(int[] nums) {//依次从前往后,从后往前寻找最长的,在相加更新最大值int[] l = longestObstacleCourseAtEachPosition(nums);int[] r = longestObstacleCourseAtEachPosition(reverse(nums));r = reverse(r);int max_cur = 0;int n = nums.length;for (int i = 0; i < n; i++) {if (l[i] + r[i] > max_cur && l[i] >= 2 && r[i] >= 2) {max_cur = l[i] + r[i];}}return n - max_cur + 1;}public int[] longestObstacleCourseAtEachPosition(int[] obstacles) {List<Integer> g = new ArrayList<>();int n = obstacles.length, index = 0;int[] ans = new int[n];for (int x : obstacles) {int j = lowerBound(g, x);if (j == g.size()) {g.add(x);} else {g.set(j, x);}ans[index++] = j + 1;}return ans;}//返回大于等于target的第一个下标public int lowerBound(List<Integer> g, int target) {int left = 0, right = g.size() - 1;while (left <= right) {int mid = (right - left) / 2 + left;if (g.get(mid) < target) {left = mid + 1;} else {right = mid - 1;}}return left;}//倒置数组public int[] reverse(int[] nums) {int n = nums.length;int[] newArray = new int[n];for (int i = 0; i <= n >> 1; i++) {newArray[i] = nums[n - i - 1];newArray[n - i - 1] = nums[i];}return newArray;}
}

http://www.ppmy.cn/news/1158377.html

相关文章

Lazysysadmin靶机

信息收集 主机发现 nmap -sn 192.168.88.0/24 //-sn&#xff1a;制作主机发现&#xff0c;不做端口扫描&#xff1b;扫描结果包含本机IP 端口扫描 nmap --min-rate 10000 -p- 192.168.88.136 扫描端口详细信息 端口扫描发现&#xff0c;该主机的22、80、139、445、3306、…

《向量数据库指南》——选择向量数据库时需要考量的点Milvus Cloud

大禹智库:选择向量数据库时需要考量的点 性能 如上述,查询性能(查询的响应时间,系统的吞吐能力)是在选型向量数据库时的一个重要参考点,市面上现有的向量数据库的 Benchmark 有: ANN-Benchmark 是一种用于评估各种向量数据库和近似最近邻(ANN)算法性能的工具 VectorD…

【网络协议】聊聊网络分层

常用的网络协议 首先我们输入www.taobao.com&#xff0c;会先经过DNS进行域名解析&#xff0c;转换为59.82.122.115的公网IP地址。然后就会发起请求&#xff0c;一般来说非加密的使用http&#xff0c;加密的使用https。上面是在应用层做的处理&#xff0c;那么接下来就是到传输…

航空发动机轴承数据集 | 写论文再也不用担心没数据集啦!

今天给大家推荐一个航空发动机轴承公开数据集&#xff0c;该数据集是以航空发动机为原型搭建的试验台&#xff0c;与航空发动机工况更接近&#xff0c;诊断起来也更具有挑战性。该数据集是2023年公开的&#xff0c;因此目前基于该数据集的论文不是很多&#xff0c;小伙伴们赶紧…

文档:htm格式转txt

꧂ 两个地方都保存꧁ import os import codecs from bs4 import BeautifulSoupdef generate_output_filename(file_path, save_path):# 获取文件名&#xff08;不包含扩展名&#xff09;file_name os.path.splitext(os.path.basename(file_path))[0]# 构造保存路径和文件名ou…

ant design vue:自定义锚点样式

要做一个如下图的锚点&#xff0c;ant design vue的锚点样式比较简单&#xff0c;按照官网文档:affix"false" :showInkInFixed"true"&#xff0c;就可以显示小方块&#xff0c;但是我试了一下不管用&#xff0c;而且锚点组件不固定起来很不方便&#xff0c…

算法通关村第一关-链表白银经典问题笔记

大家好今天来写第一关的白银挑战-链表经典问题. 两个链表的第一个公共结点 这是一道经典的链表问题 : 输入两个无环的单向链表&#xff0c;找出它们的第一个公共结点&#xff0c;如果没有公共节点则返回空。 牛客NC66 : 剑指offer56 : 分析 : 屡试不爽的方法: 将常用数据…

卡片翻转效果的实现思路

卡片翻转效果的实现思路 HTML 基础布局 <div class"card"><img class"face" src"images/chrome_eSCSt8hUpR.png" /><p class"back"><span>背面背景</span></p> </div>布局完成后如下所示…