Given a circular array of size n containing integers from 1 to n. Find the last element that would remain in the list after erasing every second element starting from the first element.
Input: 5 Output: 3 Explanation Element in circular array are: 1 2 3 4 5 Starting from first element i.e, '1' delete every second element like this, 1 0 3 4 5 1 0 3 0 5 0 0 3 0 5 0 0 3 0 0 For demonstration purpose erased element would be treated as '0'. Thus at the end of list, the last element remains is 3. Input: 10 Output: 5
The Naive approach is to remove every second element from the array until the size of array becomes equals to ‘1’. Time complexity of this approach is O(n2) which would not be feasible for large value of ‘n’.
The Efficient approach is to use recursion. Let’s consider n to be even. In one traversal, numbers 2, 4, 6 … N will be removed and we start again from 1. Thus exactly n/2 numbers are removed, and we start as if from 1 in an array of N/2 containing only odd digits 1, 3, 5, … n/2.
Thus by this intuation, their recursive formula can be written as,
If n is even: solve(n) = 2 * solve(n/2) - 1 else solve(n) = 2 * solve((n-1) / 2) + 1 Base condition would occur when n = 1, then answer would be 1.
Time complexity: O(log(n))
Auxiliary space: O(1)
- Find the first repeating element in an array of integers
- Given an array and two integers l and r, find the kth largest element in the range [l, r]
- Replace each element by the difference of the total size of the array and frequency of that element
- Range Query on array whose each element is XOR of index value and previous element
- Replace every array element by Bitwise Xor of previous and next element
- Sum of (maximum element - minimum element) for all the subsets of an array.
- Find the element that appears once in an array where every other element appears twice
- Replace every element of the array by its previous element
- Closest greater element for every array element from another array
- Find Second largest element in an array
- Find closest value for every element in array
- Find an element in Bitonic array
- Find an element in array such that sum of left array is equal to sum of right array
- Find element in array that divides all array elements
- Replace every element of the array by its next element
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.
Improved By : jit_t