-
-
Notifications
You must be signed in to change notification settings - Fork 261
Added next_greater_element_II #402
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
anushree71199
wants to merge
1
commit into
chandrikadeb7:main
Choose a base branch
from
anushree71199:Next_Greater_Element_II
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,34 @@ | ||
Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of the line i is at (i, ai) and (i, 0). Find two lines, which, together with the x-axis forms a container, such that the container contains the most water. | ||
Given an array of n non-negative integers a1, a2, ..., an , where each element represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of a line i is at (i, ai) and (i, 0). Find two lines, which, together with the x-axis forms a container, such that the container contains the most water. | ||
|
||
Note: You may not slant the container. | ||
|
||
Example:<br> | ||
a) Input: n=9<br> | ||
lines = [1,8,6,2,5,4,8,3,7]<br> | ||
Output: 49<br> | ||
Explanation: The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water the container can contain is 49 which lies between the index(1,8) i.e, between the line 8 at 1st position and line 7 at 8th position. | ||
|
||
|
||
b) Input: n=5<br> | ||
lines = [4,3,2,1,4]<br> | ||
Output: 16<br> | ||
Explanation: The container containing most water lies between the index 0 and 4 i.e, between the line 4 at 0th position and line 4 at 4th position. | ||
|
||
|
||
Approach: Two Pointer Approach | ||
|
||
The max area is calculated by the following formula: | ||
Area= (j - i) * min(lines[i], lines[j])<br> | ||
|
||
We should choose (i, j) so that Area is max. Note that i, j go through the range (1, n) and j > i. | ||
The simple way is to take all possibilities of (i, j) and compare all obtained Area. The time complexity will be O(n)^2. | ||
|
||
But, What we gonna do is to choose all possibilities of (i, j) in a wise way. If: | ||
lines[i] < lines[j] we will check the next (i+1, j) (or move i to the right) | ||
lines[i] >= lines[j] we will check the next (i, j-1) (or move j to the left) | ||
Here is the explaination for that: | ||
When lines[i] < lines[j] , we don't need to calculate all (i, j-1), (i, j-2), .... Why? because these max areas will be smaller than our Area at (i, j). | ||
|
||
NOTE: The Time complexity of this solution is O(n). | ||
|
||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
import java.util.Arrays; | ||
|
||
public class NextGreaterSet | ||
{ | ||
// Utility function to swap two digit | ||
static void swap(char ar[], int i, int j) | ||
{ | ||
char temp = ar[i]; | ||
ar[i] = ar[j]; | ||
ar[j] = temp; | ||
} | ||
static void findNext(char ar[], int n) | ||
{ | ||
int i; | ||
|
||
// I) Start from the right most digit | ||
// and find the first digit that is smaller | ||
// than the digit next to it. | ||
for (i = n - 1; i > 0; i--) | ||
{ | ||
if (ar[i] > ar[i - 1]) { | ||
break; | ||
} | ||
} | ||
|
||
// If no such digit is found, then all | ||
// digits are in descending order means | ||
// there cannot be a greater number with | ||
// same set of digits | ||
if (i == 0) | ||
{ | ||
System.out.println("Not possible"); | ||
} | ||
else | ||
{ | ||
int x = ar[i - 1], min = i; | ||
|
||
// II) Find the smallest digit on right | ||
// side of (i-1)'th digit that is greater | ||
// than number[i-1] | ||
for (int j = i + 1; j < n; j++) | ||
{ | ||
if (ar[j] > x && ar[j] < ar[min]) | ||
{ | ||
min = j; | ||
} | ||
} | ||
|
||
// III) Swap the above found smallest | ||
// digit with number[i-1] | ||
swap(ar, i - 1, min); | ||
|
||
// IV) Sort the digits after (i-1) | ||
// in ascending order | ||
Arrays.sort(ar, i, n); | ||
System.out.print("Next number with same" + | ||
" set of digits is "); | ||
for (i = 0; i < n; i++) | ||
System.out.print(ar[i]); | ||
} | ||
} | ||
|
||
public static void main(String[] args) | ||
{ | ||
char digits[] = { '5','3','4','9','7','6' }; | ||
int n = digits.length; | ||
findNext(digits, n); | ||
} | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
Given a number n, find the smallest number that has the same set of digits as n and is greater than n. If n is the greatest possible number with its set of digits, then print “not possible”. | ||
|
||
Examples: | ||
For simplicity of implementation, we have considered the input number as a string. | ||
|
||
Input: n = "218765" | ||
Output: "251678" | ||
|
||
Input: n = "1234" | ||
Output: "1243" | ||
|
||
Input: n = "4321" | ||
Output: "Not Possible" | ||
|
||
Input: n = "534976" | ||
Output: "536479" |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we have the solution file for this question?