力扣1144---递减元素使数组呈锯齿状(Java、Python、模拟)

news/2024/11/17 3:41:37/

目录

题目描述:

思路描述:

代码:

        Java:

        Python:


题目描述:

给你一个整数数组 nums,每次 操作 会从中选择一个元素并 将该元素的值减少 1

如果符合下列情况之一,则数组 A 就是 锯齿数组

  • 每个偶数索引对应的元素都大于相邻的元素,即 A[0] > A[1] < A[2] > A[3] < A[4] > ...
  • 或者,每个奇数索引对应的元素都大于相邻的元素,即 A[0] < A[1] > A[2] < A[3] > A[4] < ...

返回将数组 nums 转换为锯齿数组所需的最小操作次数。

示例 1:

输入:nums = [1,2,3]
输出:2
解释:我们可以把 2 递减到 0,或把 3 递减到 1。

示例 2:

输入:nums = [9,6,1,6,2]
输出:4

思路描述:

        题目的最终转换结果无非就两种,第一种就是每个偶数索引对应的元素都大于相邻的元素,第二种就是每个奇数索引对应的元素都大于相邻的元素,因此,我们只需要统计转换成这两种情况的操作次数,再从这两种情况中选一个最小的,即为所求。

代码:

        Java:

class Solution {public int movesToMakeZigzag(int[] nums) {int n=nums.length;int num1=caclute(nums,1,n);//奇数int num2=caclute(nums,0,n);//偶数return Math.min(num1,num2);}public int caclute(int[] nums,int start,int n){int result=0;for(int i=start;i<n;i+=2){int a1=Integer.MAX_VALUE;if(i-1>=0){a1=Math.min(a1,nums[i-1]);}if(i+1<n){a1=Math.min(a1,nums[i+1]);}if(nums[i]>=a1){result+=(nums[i]-(a1-1));}}return result;}
}

        Python:

class Solution(object):def movesToMakeZigzag(self, nums):""":type nums: List[int]:rtype: int"""n=len(nums)num1=self.getResult(nums,1,n)num2=self.getResult(nums,0,n)return min(num1,num2)def getResult(self,nums,start,n):result=0for i in range(start,n,2):num=100001if i-1>=0:num=min(num,nums[i-1])if i+1<n:num=min(num,nums[i+1])if nums[i]>=num:result+=(nums[i]-(num-1))return result

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

相关文章

Go中的HTTP请求处理概述

使用 Go 处理 HTTP 请求主要涉及两件事&#xff1a;ServeMuxes 和 Handlers。 ServeMux本质上是一个 HTTP 请求路由器&#xff08;或多路复用器&#xff09;。它将传入的请求与预定义的 URL 路径列表进行比较&#xff0c;并在找到匹配时调用路径的关联 handler。 handler 负责写…

Python连接Oracle数据库问题解决及Linux服务器操作知识

背景说明 最近在做一个视频分析的项目&#xff0c;然后需要将视频分析的数据写入到oracle数据库&#xff0c;直接在服务器上测试数据库连接的时候出现了这个bug提示&#xff0c;自己通过不断的研究探讨&#xff0c;最终把这个问题成功进行了解决&#xff0c;在这里进行一下记录…

芯片的未来发展趋势

2024 年&#xff0c;该行业将专注于 AI/ML、RISC-V、量子、安全等发展趋势。 今年年初&#xff0c;大多数人从未听说过生成式人工智能。现在整个世界都在竞相利用它&#xff0c;而这仅仅是个开始。量子计算、6G、智能基础设施等新市场领域专用处理正在加速对更快、更高效、更多…

Linux学习之路 -- PCB介绍 -- 进程优先级

1、什么是优先级&#xff1f; 进程需要某一种资源&#xff0c;而系统要通过特定的方式来决定谁先获得这些资源&#xff0c;而系统的做法就是给不同的进程安排不同的优先级。让优先级高的进程先享有一些资源。 2、为什么要有优先级 因为资源的缺乏&#xff0c;所以系统的才会…

【JavaEE多线程】理解和管理线程生命周期

目录 ThreadThread类的常用构造方法Thread类的常见属性启动一个线程-start()终止一个线程等待一个线程-join()线程的状态 Thread Thread 就是在 Java 中&#xff0c;线程的代言人。系统中的一个线程&#xff0c;就对应到 Java 中的一个 Thread 对象。围绕线程的各种操作&#…

数据结构----顺序表

在学习顺序表之前&#xff0c;我们先来了解一下数据结构。 数据是什么呢&#xff1f; 我们在生活中常见的名字&#xff0c;数字&#xff0c;性别等都属于数据。 结构又是什么呢&#xff1f; 在计算机中&#xff0c;结构就是用来保存数据的方式。 总的来说&#xff0c;数据…

单片机入门还能从51开始吗?

选择从51单片机开始入门还是直接学习基于ARM核或RISC核的单片机&#xff0c;取决于学习目标、项目需求以及个人兴趣。每种单片机都有其特定的优势和应用场景&#xff0c;了解它们的特点可以帮助你做出更合适的选择。 首先&#xff0c;我们说一下51单片机的优势&#xff1a; 成熟…

Vue的虚拟DOM是什么

核心思想 虚拟DOM/Virtual DOM&#xff0c;是数据驱动视图的一种解决方案。核心思想&#xff1a;使用 js对象的形式来表现html的dom结构。 背景 由于现代网络和浏览器的发展&#xff0c;网页的内容也变得很复杂&#xff0c;ajax 诞生让用户可以在不刷新页面的条件下获取到数…