Find numbers starting from 1 with sum at-most K excluding given numbers
Given an array arr[] and an integer K, the task is to find the numbers starting from 1 with sum at-most K excluding elements of the given array
Examples:
Input: arr[] = {4, 6, 8, 12}, K = 14
Output: {1, 2, 3, 5}
Explanation: Maximum possible sum is 11, with elements as 1, 2, 3 and 5
Input: arr[] = {1, 3, 4}, K = 7
Output: {2, 5}
Explanation: Maximum possible sum is 7, with elements as 2 and 5
Approach: The task can be solved by creating a hashmap to store the elements of the given array. Start iterating from 1, and keep track of the current sum and the excluded elements by checking the hashmap.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void solve(vector< int >& arr, int K)
{
unordered_map< int , int > occ;
for ( int i = 0; i < ( int )arr.size(); i++)
occ[arr[i]]++;
int curSum = 0;
int cur = 1;
vector< int > ans;
while (curSum + cur <= K) {
if (occ.find(cur) != occ.end()) {
cur++;
}
else {
curSum += cur;
ans.push_back(cur);
cur++;
}
}
for ( int i = 0; i < ( int )ans.size(); i++)
cout << ans[i] << " " ;
}
int main()
{
vector< int > arr = { 4, 6, 8, 12 };
int K = 14;
solve(arr, K);
return 0;
}
|
Java
import java.util.ArrayList;
import java.util.HashMap;
class GFG {
public static void solve(ArrayList<Integer> arr, int K) {
HashMap<Integer, Integer> occ = new HashMap<Integer, Integer>();
for ( int i = 0 ; i < arr.size(); i++) {
if (occ.containsKey(arr.get(i))) {
occ.put(arr.get(i), occ.get(arr.get(i)) + 1 );
} else {
occ.put(arr.get(i), 1 );
}
}
int curSum = 0 ;
int cur = 1 ;
ArrayList<Integer> ans = new ArrayList<Integer>();
while (curSum + cur <= K) {
if (occ.containsKey(cur)) {
cur++;
} else {
curSum += cur;
ans.add(cur);
cur++;
}
}
for ( int i = 0 ; i < ( int ) ans.size(); i++)
System.out.print(ans.get(i) + " " );
}
public static void main(String args[]) {
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add( 4 );
arr.add( 6 );
arr.add( 8 );
arr.add( 12 );
int K = 14 ;
solve(arr, K);
}
}
|
Python3
def solve(arr, K):
occ = {}
for i in range ( len (arr)):
if (arr[i] in occ):
occ[arr[i]] + = 1
else :
occ[arr[i]] = 1
curSum = 0
cur = 1
ans = []
while (curSum + cur < = K) :
if (cur in occ):
cur + = 1
else :
curSum + = cur
ans.append(cur)
cur + = 1
for i in range ( len (ans)):
print (ans[i], end = " " )
arr = [ 4 , 6 , 8 , 12 ]
K = 14
solve(arr, K)
|
C#
using System;
using System.Collections.Generic;
public class GFG {
public static void solve(List< int > arr, int K) {
Dictionary< int , int > occ = new Dictionary< int , int >();
for ( int i = 0; i < arr.Count; i++) {
if (occ.ContainsKey(arr[i])) {
occ.Add(arr[i], occ[arr[i]] + 1);
} else {
occ.Add(arr[i], 1);
}
}
int curSum = 0;
int cur = 1;
List< int > ans = new List< int >();
while (curSum + cur <= K) {
if (occ.ContainsKey(cur)) {
cur++;
} else {
curSum += cur;
ans.Add(cur);
cur++;
}
}
for ( int i = 0; i < ( int ) ans.Count; i++)
Console.Write(ans[i] + " " );
}
public static void Main(String []args) {
List< int > arr = new List< int >();
arr.Add(4);
arr.Add(6);
arr.Add(8);
arr.Add(12);
int K = 14;
solve(arr, K);
}
}
|
Javascript
<script>
function solve(arr, K) {
let occ = new Map();
for (let i = 0; i < arr.length; i++) {
if (occ.has(arr[i])) {
occ.set(arr[i], occ.get(arr[i]) + 1)
}
else {
occ.set(arr[i], 1);
}
}
let curSum = 0;
let cur = 1;
let ans = [];
while (curSum + cur <= K) {
if (occ.has(cur)) {
cur++;
}
else {
curSum += cur;
ans.push(cur);
cur++;
}
}
for (let i = 0; i < ans.length; i++)
document.write(ans[i] + " " );
}
let arr = [4, 6, 8, 12];
let K = 14;
solve(arr, K);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(N)
Last Updated :
13 Dec, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...