Sponsored
Sponsored
This approach involves two distinct passes over the matrix: first to flip each row horizontally by reversing the elements, and second to invert all the elements by replacing 0s with 1s and vice versa.
Time Complexity: O(n^2) as each element is visited once.
Space Complexity: O(1) as no additional space proportional to input size is used.
1class Solution:
2 def flipAndInvertImage(self, image):
3 for row in image:
4 start, end = 0, len(row) - 1
5 while start <= end:
6 row[start], row[end] = row[end] ^ 1, row[start] ^ 1
7 start += 1
8 end -= 1
9 return image
10
11# Example usage
12image = [[1,1,0], [1,0,1], [0,0,0]]
13result = Solution().flipAndInvertImage(image)
The Python solution uses a two-pointer technique to flip and invert each row efficiently. XOR with 1 is used for inversion.
This approach attempts to combine the flipping and inverting processes in one pass to enhance efficiency, leveraging the symmetry characteristics of the problem.
Time Complexity: O(n^2) given each element may potentially be processed.
Space Complexity: O(1) since modifications are in place.
1public class Solution {
2 public int[][] FlipAndInvertImage(int[][] image) {
int n = image.Length;
foreach (var row in image) {
for (int j = 0; j < (n + 1) / 2; ++j) {
if (row[j] == row[n - 1 - j]) {
row[j] ^= 1;
row[n - 1 - j] ^= 1;
}
}
}
return image;
}
static void Main(string[] args) {
int[][] image = new int[][] { new int[] {1, 1, 0}, new int[]{1, 0, 1}, new int[]{0, 0, 0} };
Solution solution = new Solution();
solution.FlipAndInvertImage(image);
}
}
The C# solution uses symmetry efficiently by traversing from both ends of a row, flipping and inverting as needed to minimize operations when the elements are the same.