LeetCode·每日一题·805.数组的均值分割·递归回溯
2023-09-27 14:26:29 时间
题目
示例
思路
数组分为 两个组,使得两个数组的平均值相同
可以使用递归的方法,枚举每一个元素的归属组合,并寻找符合要求的一个组合,但是会超时。。。。。
代码
bool dfs(int *nums, int numsSize, int index, float leftSum, float leftCount, float rightSum, float rightCount)
{
if (leftSum / leftCount == rightSum / rightCount) {
return true;
}//满足条件
for (int i = index; i < numsSize; i++) {
if (dfs(nums, numsSize, i+1, leftSum + nums[i], leftCount + 1, rightSum - nums[i], rightCount -1) == true) {
return true;
}//枚举每一个状态
}
return false;
}
bool splitArraySameAverage(int* nums, int numsSize){
int sum = 0;
for (int i = 0; i < numsSize; ++i) {
sum += nums[i];
}//记录前缀和,方便比较
return dfs(nums, numsSize, 0, 0, 0, sum, numsSize);//递归回溯
}
作者:小迅
链接:https://leetcode.cn/problems/split-array-with-same-average/solutions/1967340/by-xun-ge-v-hbqj/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution {
public:
bool splitArraySameAverage(vector<int>& nums) {
int n = nums.size();
if (n == 1) return false;
int s = accumulate(nums.begin(), nums.end(), 0);
for (int& v : nums) v = v * n - s;
int m = n >> 1;
unordered_set<int> vis;
for (int i = 1; i < 1 << m; ++i) {
int t = 0;
for (int j = 0; j < m; ++j) if (i >> j & 1) t += nums[j];
if (t == 0) return true;
vis.insert(t);
}
for (int i = 1; i < 1 << (n - m); ++i) {
int t = 0;
for (int j = 0; j < (n - m); ++j) if (i >> j & 1) t += nums[m + j];
if (t == 0 || (i != (1 << (n - m)) - 1 && vis.count(-t))) return true;
}
return false;
}
};
作者:小迅
链接:https://leetcode.cn/problems/split-array-with-same-average/solutions/1967340/by-xun-ge-v-hbqj/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章
- 【LeetCode】找到所有数组中消失的数字 [E](数组)
- LeetCode_双指针_中等_167.两数之和 II - 输入有序数组
- LeetCode_贪心算法_中等_670.最大交换
- LeetCode_哈希表_中等_817.链表组件
- LeetCode_原地哈希_中等_442.数组中重复的数据
- LeetCode_数据结构设计_中等_146.LRU 缓存
- LeetCode_矩形_困难_391.完美矩形
- LeetCode_多叉树_简单_559.N 叉树的最大深度
- LeetCode_字符串_简单_125.验证回文串
- LeetCode_排序_快速选择_中等_215.数组中的第K个最大元素
- LeetCode·每日一题·1636.按照频率将数组升序排序·哈希
- LeetCode·每日一题·1470.重新排列数组·构造
- LeetCode·每日一题·
- LeetCode·304竞赛·6132·使数组中所有元素都等于零·模拟·哈希
- LeetCode·每日一题·1408.数组中的字符串匹配·模拟
- 【LeetCode】TreeNode类实现解析(java实现)
- Leetcode[110]-Balanced Binary Tree
- [LeetCode] 741. Cherry Pickup 捡樱桃
- leetcode 724 寻找数组的中心下标
- leetcode 941 有效的山脉数组
- leetcode 33 搜索旋转排序数组
- LeetCode 540.有序数组中的单一元素