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)
GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details
- 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]
- Maximum possible middle element of the array after deleting exactly k elements
- Find Array formed by adding each element of given array with largest element in new array to its left
- Find just strictly greater element from first array for each element in second array
- Largest element smaller than current element on left for every element in Array
- Sort integers in array according to their distance from the element K
- 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
- Check if minimum element in array is less than or equals half of every other element
- Find the element that appears once in an array where every other element appears twice
- Sum of (maximum element - minimum element) for all the subsets of an array.
- Maximum possible remainder when an element is divided by other element in the array
- Replace every array element by Bitwise Xor of previous and next element
- Array formed from difference of each element from the largest element in the given array
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. 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