"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > Finding the Median of Two Sorted Arrays in Java

Finding the Median of Two Sorted Arrays in Java

Published on 2024-07-30
Browse:669

Finding the Median of Two Sorted Arrays in Java

JAVA Tutorial
Java File

Introduction

The problem of finding the median of two sorted arrays is a classic coding interview question. The challenge is to find the median efficiently, with a time complexity of O(log(min(m, n))), where m and n are the sizes of the two arrays. In this article, we’ll walk through a Java solution that employs binary search to achieve this efficiency.

Problem Statement

Given two sorted arrays nums1 and nums2, find the median of the two sorted arrays. The overall runtime complexity should be O(log(min(m, n))), where m and n are the sizes of the two arrays.

Approach

To solve this problem, we use a binary search approach on the smaller of the two arrays. The goal is to partition both arrays such that the left half contains all elements less than or equal to the elements in the right half. Here’s a step-by-step explanation:

  1. Ensure nums1 is the Smaller Array: For easier binary search, make sure nums1 is the smaller array.
  2. Perform Binary Search: Use binary search on nums1 to find the correct partition.
  3. Partitioning: Partition both arrays such that the left side contains lower elements, and the right side contains higher elements.
  4. Calculate Median: Based on the partitions, calculate the median.

Solution

Here’s a detailed Java implementation of the solution:

public class MedianOfTwoSortedArrays {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        // Ensure nums1 is the smaller array
        if (nums1.length > nums2.length) {
            int[] temp = nums1;
            nums1 = nums2;
            nums2 = temp;
        }

        int x = nums1.length;
        int y = nums2.length;
        int low = 0, high = x;

        while (low  minY) {
                high = partitionX - 1;
            } else {
                low = partitionX   1;
            }
        }

        throw new IllegalArgumentException("Input arrays are not sorted");
    }

    public static void main(String[] args) {
        MedianOfTwoSortedArrays solution = new MedianOfTwoSortedArrays();

        int[] nums1 = {1, 3};
        int[] nums2 = {2};
        System.out.println("Median: "   solution.findMedianSortedArrays(nums1, nums2)); // Output: 2.0

        int[] nums1_2 = {1, 2};
        int[] nums2_2 = {3, 4};
        System.out.println("Median: "   solution.findMedianSortedArrays(nums1_2, nums2_2)); // Output: 2.5
    }
}

Explanation

  1. Initialization: Ensure nums1 is the smaller array.
  2. Binary Search: Perform binary search on nums1 to find the correct partition.
  3. Partitioning and Median Calculation: Calculate the maximum of the left elements and the minimum of the right elements to find the median.

Conclusion

This binary search approach provides an efficient solution to finding the median of two sorted arrays. By leveraging binary search on the smaller array, the solution achieves a time complexity of O(log(min(m, n))), making it suitable for large input arrays.

Release Statement This article is reproduced at: https://dev.to/codeswithpankaj/finding-the-median-of-two-sorted-arrays-in-java-j8h?1 If there is any infringement, please contact [email protected] to delete it
Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3