茂名异型材设备价格_建仓机械

锡林郭勒盟隔热条PA66生产设备厂家 2026-01-08: 三段式数组Ⅰ。用go语言, 给定一个长度为 n 的整数数

塑料管材设备

2026-01-08:三段式数组Ⅰ。用go语言,给定一个长度为 n 的整数数组 nums。若存在两个下标 p、q锡林郭勒盟隔热条PA66生产设备厂家,满足 0

3

-1000

输入: nums = [1,3,5,4,2,6]。

输出: true。

解释:

选择 p = 2, q = 4:

nums[0...2] = [1, 3, 5] 严格递增 (1

nums[2...4] = [5, 4, 2] 严格递减 (5 > 4 > 2)。

nums[4...5] = [2, 6] 严格递增 (2

题目来自力扣3637。

判断过程详解

1. 初始检查

函数先检查数组的前两个元素nums[0]和nums[1]。由于三段式模式要求一段须是严格上升的,如果nums[0] >= nums[1],意味着一开始就没有上升,函数会立即返回false。

2. 遍历与模式变化计数

接下来,函数从索引i=2开始遍历数组,直到后一个元素。

• 检查相邻元素是否相等:在遍历过程中,如果发现任何相邻元素nums[i-1]和nums[i]相等,由于题目要求每一步都须是“严格”上升或下降,函数会立即返回false。

• 检测趋势变化:核心逻辑是判断趋势是否改变。代码通过比较连续两个区间的单调来判断:(nums[i-2] 不相等(使用 != 进行比较),就说明在索引i-1这个位置,数组的趋势发生了改变(例如从上升变为下降,或从下降变为上升)。每当检测到一次趋势变化,计数器cnt就增加1。

3. 结果判定

遍历结束后,函数检查趋势变化的次数cnt是否等于3。为什么是3?因为一个完整的三段式“上升→下降→上升”模式,其趋势变化点应该是:

• 在p点,从上升变为下降(1次变化)。

• 在q点,从下降变为上升(2次变化)。

然而,异型材设备你的代码逻辑中,计数器cnt的初始值设为1,而不是0。这意味着它默认从某个“状态”开始计数。在遍历中,当找到一个变化点(即p点,上升变下降)时,cnt增加到2;找到二个变化点(即q点,下降变上升)时,cnt增加到3。因此,终判断cnt == 3意味着找到了完整的两个趋势变化点,从而确定数组符三段式模式。

⏱️ 复杂度分析

• 时间复杂度:O(n)锡林郭勒盟隔热条PA66生产设备厂家。

函数的核心是一个单层的for循环,从索引2开始遍历到数组末尾。循环的次数与数组的长度n成线关系。在循环内部的所有操作(比较、条件判断、计数器递增)都是常数时间O(1)内完成的。因此,总的时间复杂度是线阶O(n)。

• 额外空间复杂度:O(1)。

函数执行过程中,只使用了固定数量的额外变量(如cnt、i)。这些变量的数量与输入数组的大小n无关。因此,额外的空间复杂度是常数阶O(1)。

Go完整代码如下:

package main

import (

"fmt"

)

电话:0316--3233399

func isTrionic(nums []int)bool {

if nums[0] >= nums[1] { // 一开始须是递增的

returnfalse

}

cnt := 1

for i := 2; i

if nums[i-1] == nums[i] {

returnfalse

}

if (nums[i-2]

cnt++

}

}

return cnt == 3// 一定是增减增

}

func main {锡林郭勒盟隔热条PA66生产设备厂家

nums := []int{1, 3, 5, 4, 2, 6}

result := isTrionic(nums)

fmt.Println(result)

}

Python完整代码如下:

# -*-coding:utf-8-*-

def is_trionic(nums):

if nums[0] >= nums[1]: # 一开始须是递增的

return False

cnt = 1

for i in range(2, len(nums)):

if nums[i-1] == nums[i]:

return False

if (nums[i-2]

cnt += 1

return cnt == 3 # 一定是增减增

if __name__ == "__main__":

nums = [1, 3, 5, 4, 2, 6]

result = is_trionic(nums)

print(result)

C++完整代码如下:

#include

#include

using namespace std;

bool isTrionic(const vector& nums) {

if (nums[0] >= nums[1]) { // 一开始须是递增的

returnfalse;

}

int cnt = 1;

for (size_t i = 2; i

if (nums[i-1] == nums[i]) {

returnfalse;

}

if ((nums[i-2]

cnt++;

}

}

return cnt == 3; // 一定是增减增

}

int main {

vector nums = {1, 3, 5, 4, 2, 6};

bool result = isTrionic(nums);

cout

return0;

}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到新的AI科普文章、工具评测、提升率的秘籍以及行业洞察。

欢迎关注“福大大架构师每日一题”,发消息可获得面试资料锡林郭勒盟隔热条PA66生产设备厂家,让AI助力您的未来发展。

关于我们 新闻资讯 产品展示