文章目录
- 题目
- 思路
- 代码
- 复杂度分析
- 时间复杂度
- 空间复杂度
- 结果
题目
题目链接🔗
给你一个长度为 偶数 的整数数组 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)