傳送門:面試題 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 解釋 第乙個 ...