leetcode演算法題 劍指Offer篇(17)

2021-10-23 20:52:34 字數 2291 閱讀 6303

1.1 題目描述:

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。

1.2 題解

1.2.1 暴力求解

public

intreversepairs

(int

nums)

}return count;

}

1.2.2 歸併排序
public

intreversepairs

(int

nums)

int[

] temp =

newint

[len]

;//輔助陣列

return

reversepairs

(copy,

0, len -

1, temp);}

/** * nums[left..right] 計算逆序對個數並且排序

** @param copy

* @param left

* @param right

* @param temp

* @return

*/private

intreversepairs

(int

copy,

int left,

int right,

int[

] temp)

int count =

mergeandcount

(copy, left, mid, right, temp)

;return leftcount + rightcount + count;

}/**

* 合併處理

** @param copy

* @param left

* @param mid

* @param right

* @param temp

* @return

*/private

intmergeandcount

(int

copy,

int left,

int mid,

int right,

int[

] temp)

int count =0;

int l = left, r = mid +1;

for(

int j = left; j <= right; j++

)else

if(r == right +1)

else

if(temp[l]

<= temp[r]

)else

}return count;

}

2.1 題目描述:
輸入兩個鍊錶,找出它們的第乙個公共節點。

如下面的兩個鍊錶:

在節點 c1 開始相交。

2.2 題解

2.2.1 雙指標法

解法形象來說就是:

你變成我,走過我走過的路。

我變成你,走過你走過的路。

然後我們便相遇了…

public listnode getintersectionnode

(listnode heada, listnode headb)

return node1;

}

3.1 題目描述:
示例 1:

輸入: nums = [5,7,7,8,8,10], target = 8

輸出: 2

3.2 題解

3.2.1二分法

排序陣列中的搜尋問題,首先想到 二分法 解決。

leetcode演算法題 劍指Offer篇(1)

1.1 題目描述 在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。1.2 題解 1.2.1 利用map結構public intfindrepeatnumber i...

leetcode演算法題 劍指Offer篇(13)

1.1 題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。1.2 題解 1.2.1 摩爾投票法 驗證 x 是否為眾數 for int num nums if num i count return count nums.length 2?i 0 當無眾數時返回 0 2.1 題目描...

leetcode演算法題 劍指Offer篇(20)

1.1 題目描述 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,則輸出任意一對即可。1.2 題解 1.2.1 雙指標public int twosum int nums,int target else if temp target i els...