How to Compare two arrays and Check both values are matched or not in Java
Problem Description :
A school is trying to take an annual photo of all the students. The students are asked to stand in a single file line in non-decreasing order by height. Let this ordering be represented by the integer array expected
where expected[i]
is the expected height of the ith
student in line.
You are given an integer array heights
representing the current order that the students are standing in. Each heights[i]
is the height of the ith
student in line (0-indexed).
Return the number of indices where heights[i] != expected[i]
.
Example 1 :
Input: heights = [1,1,4,2,1,3]
Output: 3
Explanation:
heights: [1,1,4,2,1,3]
expected: [1,1,1,2,3,4]
Indices 2, 4, and 5 do not match.
Example 2 :
Input: heights = [5,1,2,3,4]
Output: 5
Explanation:
heights: [5,1,2,3,4]
expected: [1,2,3,4,5]
All indices do not match.
Example 3 :
Input: heights = [1,2,3,4,5]
Output: 0
Explanation:
heights: [1,2,3,4,5]
expected: [1,2,3,4,5]
All indices match.
In above problem, we have to simply sort the array and check it is matching values or not. So lets jump on solution and explanation.
Solution 1 :
class Solution {
public int heightChecker(int[] heights) {
int[] copiedHeights = new int[heights.length];
for (int i = 0; i < heights.length; i++) {
copiedHeights[i] = heights[i];
}
Arrays.sort(copiedHeights);
int notMatched = 0;
for (int i = 0; i < heights.length; i++) {
if (heights[i] != copiedHeights[i]) {
notMatched = notMatched+1;
}
}
return notMatched;
}
}
Solution explanation :
- First we declare another array copiedHeights same length as heights array.
- Using for loop, assign all heights array values to copiedHeights array.
- Sort the copiedHeights array using Arrays.sort() method.
- Traverse through heights array, check heights array values matched the sorted array not. If not matched then increase the notMatched variable by one.
- Return notMatched variable.
Output explanation :
heights : [1, 1 ,4, 2, 1, 3]
After copied and sorting copiedHeights array.
copiedHeights : [1, 1, 1, 2, 3, 4]
- i = 0, notMatched = 0
- heights[0] != copiedHeights[0] | 1 !=1 becomes false
- i = 1, notMatched = 0
- 1 != 1 becomes false
- i = 2, notMatched = 0
- 4 != 1 becomes true
- notMatched = 1
- i = 3, notMatched = 1
- 2 != 2 becomes false
- i = 4, notMatched = 1
- 1 != 3 becomes true
- notMatched = 2
- i = 5, notMatched = 2
- 3 != 4 becomes true
- notMatched = 3
- Return 3
We can also copy array without for loop. using clone() method.
Solution 2 :
class Solution {
public int heightChecker(int[] heights) {
// Copy heights array into copiedHeights
int[] copiedHeights = heights.clone();
// Sort copiedHeights
Arrays.sort(copiedHeights);
int notMatched = 0;
for (int i = 0; i < heights.length; i++) {
if (heights[i] != copiedHeights[i]) {
notMatched = notMatched+1;
}
}
return notMatched;
}
}
We can also copy and sort array in one line. lets see in following code.
Solution 3 :
class Solution {
public int heightChecker(int[] heights) {
// Copy and sort heights array
int[] copiedHeights = Arrays.stream(heights).sorted().toArray();
int notMatched = 0;
for (int i = 0; i < heights.length; i++) {
if (heights[i] != copiedHeights[i]) {
notMatched = notMatched+1;
}
}
return notMatched;
}
}
Other LeetCode problem's solution in Java :
Comments
Post a Comment