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完整代码如下:
package main
import (
"fmt"
"slices"
)
func isMiddleElementUnique(nums []int)bool {
m := len(nums) / 2
return !slices.Contains(nums[:m], nums[m]) &&
!slices.Contains(nums[m+1:], nums[m])
}func main() {
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) // 2
mid = nums[m]
return mid notin nums[:m] and mid notin nums[m + 1:]
defmain():
nums = [1, 2, 3]
result = is_middle_element_unique(nums)
print(result)if __name__ == "__main__":
main()
C++完整代码如下:
#include
#include
#include
bool isMiddleElementUnique(const std::vector& nums) {
std::size_t m = nums.size() / 2;
int mid = nums[m];
return std::find(nums.begin(), nums.begin() + m, mid) == nums.begin() + m &&
std::find(nums.begin() + m + 1, nums.end(), mid) == nums.end();
}int main() {
std::vector nums = {1, 2, 3};
bool result = isMiddleElementUnique(nums);
std::cout << std::boolalpha << result << std::endl;
return0;
}
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.