
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Partition a List into K Equal Sum Parts in C++
Suppose we have a list of numbers called nums and another value k, we have to check whether it is possible to partition nums into k different subsets where the sum of each subset are same.
So, if the input is like nums = [4, 2, 6, 5, 1, 6, 3] k = 3, then the output will be True, as we can partition them like: [6, 3], [6, 2, 1], and [4, 5].
To solve this, we will follow these steps −
- Define a function check(), this will take an array v,
- for initialize i := 1, when i < size of v, update (increase i by 1), do −
- if v[i] is not equal to v[0], then −
- return false
- if v[i] is not equal to v[0], then −
- return true
- Define a function dfs(), this will take idx, an array nums, an array temp,
- if idx is same as size of nums, then −
- return check(temp)
- ret := false
- for initialize i := 0, when i < size of temp, update (increase i by 1), do −
- temp[i] := temp[i] + nums[idx]
- ret := dfs(idx + 1, nums, temp)
- if ret is true, then −
- return true
- temp[i] := temp[i] - nums[idx]
- return false
- From the main method do the following −
- Define an array temp of size k
- return dfs(0, nums, temp)
Example (C++)
Let us see the following implementation to get better understanding −
#include <bits/stdc++.h> using namespace std; class Solution { public: bool check(vector<int>& v) { for (int i = 1; i < v.size(); i++) { if (v[i] != v[0]) return false; } return true; } bool dfs(int idx, vector<int>& nums, vector<int>& temp) { if (idx == nums.size()) { return check(temp); } bool ret = false; for (int i = 0; i < temp.size(); i++) { temp[i] += nums[idx]; ret = dfs(idx + 1, nums, temp); if (ret) return true; temp[i] -= nums[idx]; } return false; } bool solve(vector<int>& nums, int k) { vector<int> temp(k); return dfs(0, nums, temp); } }; bool solve(vector<int>& nums, int k) { return (new Solution())->solve(nums, k); } int main(){ vector<int> v = {4, 2, 6, 5, 1, 6, 3}; int k = 3; cout << solve(v, 3); }
Input
{4, 2, 6, 5, 1, 6, 3}, 3
Output
1
Advertisements