LeetCode 面試題 16 21 交換和

2021-10-18 23:04:48 字數 1214 閱讀 6468

傳送門:面試題 16.21. 交換和

題目描述:

給定兩個整數陣列,請交換一對數值(每個陣列中取乙個數值),使得兩個陣列所有元素的和相等。

返回乙個陣列,第乙個元素是第乙個陣列中要交換的元素,第二個元素是第二個陣列中要交換的元素。若有多個答案,返回任意乙個均可。若無滿足條件的數值,返回空陣列。

樣例:

樣例1:

輸入: array1 =[4

,1,2

,1,1

,2], array2 =[3

,6,3

,3]輸出:[1

,3]樣例2:

輸入: array1 =[1

,2,3

], array2 =[4

,5,6

]輸出:

思路:題目意思很明顯了,就不再解讀題意。思路就是簡單暴力的求一遍兩個陣列之和,然後求差值dis,這裡差值為保證正,將較小陣列中元素+該差值dis=num然後去較大陣列中找一下有沒有對應元素,有就直接返回,注意返回順序為arr1,arr2即可ac。

**:

class

solution

boolean flag=sum1>sum2;

int dis=sum1>sum2?sum1-sum2:sum2-sum1;if(

(dis&1)

==1)return

newint

; dis>>=1;

if(flag);}

}}else;}

}}return

newint

;}}

上面**邏輯清晰,但是顯得low了,稍微優化一下,其實我們指定乙個預設最大陣列即可,不管實際他是不是最大,只要我們用差值加上最小的陣列元素去最大陣列查詢,找到就是答案,找不到說明就不存在。(因為我們已經假設好最大和的陣列了)

class

solution

int dis=sum2-sum1;

//正的肯定不難理解,負的下面查詢時候就會加上乙個更大的數,將其變為最小陣列中的元素了(如果存在解的話)if(

(dis&1)

==1)return

newint

; dis>>=1;

for(

int i=

0;i}return

newint

;}}

面試題 16 21 交換和

給定兩個整數陣列,請交換一對數值 每個陣列中取乙個數值 使得兩個陣列所有元素的和相等。返回乙個陣列,第乙個元素是第乙個陣列中要交換的元素,第二個元素是第二個陣列中要交換的元素。若有多個答案,返回任意乙個均可。若無滿足條件的數值,返回空陣列。示例 輸入 array1 4,1,2,1,1,2 array...

leetcode 面試題專題

面試題51.陣列中的逆序對 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。利用歸併排序,將陣列分成兩部分,前面一部分和後面一部分,進行歸併的時候,需要比較兩個陣列的數值大小,如果第二個陣列的值小的話,代表前乙個陣列剩下的都...

位元組面試題 leetcode

給定乙個迴圈陣列 最後乙個元素的下乙個元素是陣列的第乙個元素 輸出每個元素的下乙個更大元素。數字 x 的下乙個更大的元素是按陣列遍歷順序,這個數字之後的第乙個比它更大的數,這意味著你應該迴圈地搜尋它的下乙個更大的數。如果不存在,則輸出 1。示例 1 輸入 1,2,1 輸出 2,1,2 解釋 第乙個 ...