☰
2026-10-03:唯一中间元素。用go语言,给定一个元素个数为奇数的整数序列。先找到序列正中间位置上的那个元素,再统计这个元素的值在整个序列中出现了多少次。如果它的出现次数正好是一次,就返回真;否
2026/10/4 19:26:38 网站建设 项目流程

2026-10-03:唯一中间元素。用go语言,给定一个元素个数为奇数的整数序列。先找到序列正中间位置上的那个元素,再统计这个元素的值在整个序列中出现了多少次。如果它的出现次数正好是一次,就返回真;否则返回假。

1 <= n == nums.length <= 100。

n 是奇数。

1 <= nums[i] <= 100。

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

输出: true。

解释:

nums 的中间元素是 2 ,它恰好出现一次。

因此,答案为 true 。

题目来自力扣3978。

大体步骤如下:

  1. 首先接收一个整数序列nums。题目保证这个序列的长度是奇数,所以序列一定有一个明确的正中间位置。

  2. 计算这个正中间位置的下标。因为长度是奇数,所以用总长度除以 2 并向下取整,就能得到中间下标。例如长度为 3 时,中间下标是 1;长度为 5 时,中间下标是 2。

  3. 根据中间下标,从序列中取出正中间的那个元素的值,记为“中间值”。

  4. 接下来要判断这个“中间值”是否在整个序列中只出现一次。判断方式是分别检查中间位置的左边部分和右边部分。

  5. 先看左半部分:左半部分是从序列开头到中间位置之前的所有元素。程序会遍历这些元素,逐个与“中间值”比较。只要发现有一个元素等于“中间值”,就说明中间值在左边也出现过,因此它不只出现一次,函数直接返回假。

  6. 如果左半部分没有找到相同的值,再检查右半部分:右半部分是从中间位置之后到序列末尾的所有元素。同样逐个与“中间值”比较。只要发现有一个元素等于“中间值”,就说明中间值在右边也出现过,函数直接返回假。

  7. 如果左半部分和右半部分都没有出现与“中间值”相同的元素,说明这个中间值在整个序列中只出现在正中间那一个位置,也就是恰好出现一次,函数返回真。

  8. 对于题目给出的输入[1, 2, 3]:

    • 序列长度为 3,中间下标为 1。
    • 中间值是nums[1],也就是 2。
    • 左半部分是[1],里面没有 2。
    • 右半部分是[3],里面也没有 2。
    • 因此 2 在整个序列中只出现一次,结果为真,最终输出true。
  9. 主程序调用这个判断函数,并打印返回的结果。

时间复杂度分析:
程序需要检查左半部分和右半部分,左半部分最多有大约 n/2 个元素,右半部分最多也有大约 n/2 个元素,合起来最多检查 n-1 个元素。因此总的时间复杂度是 O(n),其中 n 是序列长度。

额外空间复杂度分析:
程序只使用了几个变量来保存中间下标、中间值以及判断结果,没有创建与输入规模成比例的额外数组或数据结构。因此总的额外空间复杂度是 O(1)。

Go完整代码如下:

packagemainimport("fmt""slices")funcisMiddleElementUnique(nums[]int)bool{m:=len(nums)/2return!slices.Contains(nums[:m],nums[m])&&!slices.Contains(nums[m+1:],nums[m])}funcmain(){nums:=[]int{1,2,3}result:=isMiddleElementUnique(nums)fmt.Println(result)}

Python完整代码如下:

# -*-coding:utf-8-*-defis_middle_element_unique(nums:list[int])->bool:m=len(nums)//2mid=nums[m]returnmidnotinnums[:m]andmidnotinnums[m+1:]defmain():nums=[1,2,3]result=is_middle_element_unique(nums)print(result)if__name__=="__main__":main()

C++完整代码如下:

#include<iostream>#include<vector>#include<algorithm>boolisMiddleElementUnique(conststd::vector<int>&nums){std::size_t m=nums.size()/2;intmid=nums[m];returnstd::find(nums.begin(),nums.begin()+m,mid)==nums.begin()+m&&std::find(nums.begin()+m+1,nums.end(),mid)==nums.end();}intmain(){std::vector<int>nums={1,2,3};boolresult=isMiddleElementUnique(nums);std::cout<<std::boolalpha<<result<<std::endl;return0;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询