
2026-10-03唯一中间元素。用go语言给定一个元素个数为奇数的整数序列。先找到序列正中间位置上的那个元素再统计这个元素的值在整个序列中出现了多少次。如果它的出现次数正好是一次就返回真否则返回假。1 n nums.length 100。n 是奇数。1 nums[i] 100。输入 nums [1,2,3]。输出 true。解释nums 的中间元素是 2 它恰好出现一次。因此答案为 true 。题目来自力扣3978。大体步骤如下首先接收一个整数序列nums。题目保证这个序列的长度是奇数所以序列一定有一个明确的正中间位置。计算这个正中间位置的下标。因为长度是奇数所以用总长度除以 2 并向下取整就能得到中间下标。例如长度为 3 时中间下标是 1长度为 5 时中间下标是 2。根据中间下标从序列中取出正中间的那个元素的值记为“中间值”。接下来要判断这个“中间值”是否在整个序列中只出现一次。判断方式是分别检查中间位置的左边部分和右边部分。先看左半部分左半部分是从序列开头到中间位置之前的所有元素。程序会遍历这些元素逐个与“中间值”比较。只要发现有一个元素等于“中间值”就说明中间值在左边也出现过因此它不只出现一次函数直接返回假。如果左半部分没有找到相同的值再检查右半部分右半部分是从中间位置之后到序列末尾的所有元素。同样逐个与“中间值”比较。只要发现有一个元素等于“中间值”就说明中间值在右边也出现过函数直接返回假。如果左半部分和右半部分都没有出现与“中间值”相同的元素说明这个中间值在整个序列中只出现在正中间那一个位置也就是恰好出现一次函数返回真。对于题目给出的输入[1, 2, 3]序列长度为 3中间下标为 1。中间值是nums[1]也就是 2。左半部分是[1]里面没有 2。右半部分是[3]里面也没有 2。因此 2 在整个序列中只出现一次结果为真最终输出true。主程序调用这个判断函数并打印返回的结果。时间复杂度分析程序需要检查左半部分和右半部分左半部分最多有大约 n/2 个元素右半部分最多也有大约 n/2 个元素合起来最多检查 n-1 个元素。因此总的时间复杂度是 O(n)其中 n 是序列长度。额外空间复杂度分析程序只使用了几个变量来保存中间下标、中间值以及判断结果没有创建与输入规模成比例的额外数组或数据结构。因此总的额外空间复杂度是 O(1)。Go完整代码如下packagemainimport(fmtslices)funcisMiddleElementUnique(nums[]int)bool{m:len(nums)/2return!slices.Contains(nums[:m],nums[m])!slices.Contains(nums[m1:],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:mlen(nums)//2midnums[m]returnmidnotinnums[:m]andmidnotinnums[m1:]defmain():nums[1,2,3]resultis_middle_element_unique(nums)print(result)if__name____main__:main()C完整代码如下#includeiostream#includevector#includealgorithmboolisMiddleElementUnique(conststd::vectorintnums){std::size_t mnums.size()/2;intmidnums[m];returnstd::find(nums.begin(),nums.begin()m,mid)nums.begin()mstd::find(nums.begin()m1,nums.end(),mid)nums.end();}intmain(){std::vectorintnums{1,2,3};boolresultisMiddleElementUnique(nums);std::coutstd::boolalpharesultstd::endl;return0;}