1. 程式人生 > >兩個有序數組合並,並求中位數(複雜度為O(m+n))

兩個有序數組合並,並求中位數(複雜度為O(m+n))

先將兩個有序數組合併成為一個有序陣列,然後再求中位數。合併時,判斷條件是i<m || j<n

特別注意,中位數用double,int資料進行計算時,要先轉化為double(直接賦值即可),然後再計算

public double findMedianSortedArrays(int A[], int B[]) {
        int l1 = A.length;
        int l2 = B.length;
        int [] C = new int[l1+l2];
        int i =0,j =0,k=0;
        while(i<l1 || j<l2){
            if(i >= l1){
                C[k] = B[j];
                j++;
            }else if(j >= l2){
                C[k] = A[i];
                i++;
            }else{
                if(A[i]<B[j]){
                   C[k] =  A[i];
                   i++;
                }else{
                   C[k] =  B[j];
                   j++;
                }
            }
            k++;
        }
        double median = 0,a=0,b=0;
        k = l1+l2;
        if(k%2 != 0){
            median = C[(k-1)/2];
        }else{
            a = C[k/2];
            b = C[k/2-1];
            median = (a+b)/2;
        }
        return median;
    }


相關推薦

序數組合位數複雜O(m+n)

先將兩個有序數組合併成為一個有序陣列,然後再求中位數。合併時,判斷條件是i<m || j<n 特別注意,中位數用double,int資料進行計算時,要先轉化為double(直接賦值即可),

算法 - 序數組合成一個序數

== out while循環 有序數組 oid 是否 打印 sort nbsp //兩個有序數組的合並函數 public static int[] MergeList(int a[],int b[]) { int result[];

每日一題之 序數組合

描述: 給定兩個有序陣列 A,B,在不用臨時緩衝區的情況下將兩個數組合並,假設A陣列有足夠大的空間 思路: 題意就是把A,B兩個陣列都合併到A中,寫過有序連結串列合併的都知道,可以從頭開始比較兩個節點之間的大小然後依次連線,這種是確認最小的值一定在前面的情況,那麼對於此題呢?

ZZULIOJ 1124: 序數組合

題目描述 已知陣列a中有m個按升序序排列的元素,陣列b中有n個降序排列的元素,程式設計將a與b中的所有元素按降序存入陣列c中。   輸入 輸入有兩行,第一行首先是一個正整數m,然後是m個整數;第二行首先是一個正整數n,然後是n個整數,m, n均小於等於1000000。

python 序數組合後的位數

class Solution(object):     def findMedianSortedArrays(self, nums1, nums2):         """         :type nums1: List[int]         :type nums2

python算法雙指針問題:序數組的合

=== 分割線 實現 == 自己的 lis pri finish sts 最近在看《你也能看得懂的python算法書》, 自己來實現一下裏面的算法吧。 有書裏的有所不同。 比如這個題目,我的實現如下: from django.test import TestCa

把一個含有N元素的陣列迴圈右移K位, 要求時間複雜O(N)

分析與解法 這個解法其實在《啊哈!演算法》有講到。 假設原陣列序列為abcd1234,要求變換成的陣列序列為1234abcd,即迴圈右移了4位,比較之後,不難看出,其中有兩段的順序是不變的:1234和abcd,可把兩段看成兩個整體。右移K位的過程就是把陣列的兩部分交換一下。

序數一個新的序數

int tro pre pri ack ati 數組 data- string 題目:有兩個有序數組a,b,現須要將其合並成一個新的有序數組。 簡單的思路就是先放到一個新的數組中,再排序。可是這種沒體現不論什麽算法,這裏考的不是高速排序等排序算法。關鍵應該是怎樣利

merge-sorted-array——合序數

nts from -a else array integer ber sum initial Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may

面試題----合序數

合並 printf 面試 有序數組 color merge set ++ style #include<stdio.h> #include<string.h> #include<stdlib.h> void merge(int a[]

序數

i++ lis task merge args () pro bool 兩個 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syste

【LeetCode】88.合序數

for etc leet col lse else while num oid class Solution { public: void merge(vector<int>& nums1, int m, vector<int>&a

LeetCode--088--合序數

void self int pre 有序 not col leetcode -- 方法1: 1 class Solution(object): 2 def merge(self, nums1, m, nums2, n): 3 """ 4

LeetCode88合序數

ble strong col break bre return 細節 -a problem 未經博主同意,禁止瞎JB轉載。 LeetCode88合並兩個有序數組 https://leetcode-cn.com/problems/merge-sorted-array/desc

【C/C++】將二序數組合

1、同時迴圈取2個數組中的數,比較2個數組的第1個數,誰小把誰放入新陣列; 2、再把數字小的陣列往後繼續取數字; 3、如果有陣列遍歷完,就把另一個數組的剩餘資料全部賦給新陣列即可。 程式碼如下: #include <iostream> using namespace

序數組合第k或前k最小值問題

TWO-ARRAY-MEDIAN(X, Y) n ← length[X] median ← FIND-MEDIAN(X, Y, n, 1, n) if median = NOT-FOUND then median ← FIND-MEDIAN(Y, X, n, 1, n) return median FI

對倆序數組合排序

/** * 演算法學習 -- 兩個有序數組合並排序 */ public class MergeArrayAndOrder { public static void main(String

88. Merge Sorted Array【Easy】【雙指針-不用額外空間歸序數組】

com css nts equal ali accepted one acc hold Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted arr

88. 合序數

大於 足夠 數量 數組 clas class 有序 兩個 一個 給定兩個有序整數數組 nums1 和 nums2,將 nums2 合並到 nums1 中,使得 num1 成為一個有序數組。 說明: 初始化 nums1 和 nums2 的元素數量分別為 m 和 n。

【leetcode-88】 合序數

插入 lse while num 說明 空間大小 大於 index 等於 (1過) 給定兩個有序整數數組 nums1 和 nums2,將 nums2 合並到 nums1 中,使得 num1 成為一個有序數組。 說明: 初始化 nums1 和 nums2 的元素數量