文章目录
- 题目
- 思路
- 代码
- 复杂度分析
- 时间复杂度
- 空间复杂度
- 结果
题目
题目链接🔗
给你一个长度为 偶数 的整数数组
n
u
m
s
nums
nums 。你需要将这个数组分割成
n
u
m
s
1
nums1
nums1 和
n
u
m
s
2
nums2
nums2 两部分,要求:
n
u
m
s
1.
l
e
n
g
t
h
=
=
n
u
m
s
2.
l
e
n
g
t
h
=
=
n
u
m
s
.
l
e
n
g
t
h
/
2
nums1.length == nums2.length == nums.length / 2
nums1.length==nums2.length==nums.length/2
n
u
m
s
1
nums1
nums1 应包含 互不相同 的元素。
n
u
m
s
2
nums2
nums2也应包含 互不相同 的元素。
如果能够分割数组就返回
t
r
u
e
true
true ,否则返回
f
a
l
s
e
false
false 。
示例 1:
输入:nums = [1,1,2,2,3,4] 输出:true 解释:分割 nums 的可行方案之一是 nums1 = [1,2,3] 和
nums2 = [1,2,4] 。
示例 2:
输入:nums = [1,1,1,1] 输出:false 解释:分割 nums 的唯一可行方案是 nums1 = [1,1] 和 nums2
= [1,1] 。但 nums1 和 nums2 都不是由互不相同的元素构成。因此,返回 false 。
提示:
- 1 ≤ n u m s . l e n g t h ≤ 100 1 \leq nums.length \leq 100 1≤nums.length≤100
- n u m s . l e n g t h nums.length % 2 == 0 nums.length
- 1 ≤ n u m s [ i ] ≤ 100 1 \leq nums[i] \leq 100 1≤nums[i]≤100
思路
要将数组 nums 分割成两个长度相等且元素互不相同的子数组 nums1 和 nums2,直接看出现次数最多的元素有多少个,如果次数大于二肯定分不了,否则一定能分的了。
代码
class Solution {
public:
bool isPossibleToSplit(vector<int>& nums) {
int arr[105]={0};
memset(arr,0,105);
int maxzhi=0;
for(int i=0;i<nums.size();++i)
{
arr[nums[i]]++;
maxzhi=max(maxzhi,arr[nums[i]]);
}
if(maxzhi>2)return 0;
return 1;
}
};
复杂度分析
时间复杂度
遍历数组统计元素出现次数的时间复杂度为 O ( n ) O(n) O(n)
空间复杂度
O ( 1 ) O(1) O(1)