劍指Offer第36題 Java版

2021-08-02 14:28:44 字數 794 閱讀 7000

本題使用歸併排序的思想,結合歸併排序,寫出的演算法解。

//陣列中的逆序對

public static int inversepairs(int array)

public static int mergecount(int array, int copy, int start, int end)

int mid = (start+end)>>1;

int leftcount = mergecount(copy, array, start, mid);

int rightcount = mergecount(copy, array, mid+1, end);

//計算兩個已經求解好的陣列的逆序對

int i = mid;//i初始化為前半段最後乙個數字的下標

int j = end;//j初始化為後半段最後乙個數字的下標

//作為複製到臨時陣列的下標

int index = end;//輔助陣列複製的陣列的最後乙個數字的下標

//計算兩個陣列在合併過程中的逆序對數

int count = 0;//計數--逆序對的數目

while(i>=start&&j>=mid+1)else

}//把左邊剩下的放到copy陣列

for(;i>=start;i--)

//把右邊剩下的放到copy陣列

for(;j>=mid+1;j--)

//返回的是某一邊的數

return leftcount+rightcount+count;

}

劍指offer 第15 16題

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。coding utf 8 classsolution defnumberof1 self,n write code here count 0 ifn 0 n n 0xffffffff whilen count 1 n n 1 n re...

劍指Offer 第1題

問題 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。暴力法 分析 直接遍歷一遍陣列,即可判斷目標target是否存在。複雜度分析 時間複雜度 o n 2 因...

劍指offer第6題

目標 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。思路 當遇到第乙個小於前面的數時,即可能為最小值,把此值跟第乙個值...