問題:
整数の配列を考えると、2つの数のリターン指数は、彼らが特定のターゲットまで追加するように。
あなたは、各入力が持っているであろうと仮定してもよい 、正確に 一つの解決策を、あなたが利用することはできません 同じ 二度の要素を。
あなたの整数、インデックスを返す2つの配列の要素、特殊なターゲットを追加した2つの配列の要素数の配列を与えます。
あなたは毎回あなたが唯一の正しい答えを入力すると仮定することができますが、二度同じ要素を超えて使用することはできません。
解決
--1--
公共 のint [] twoSum(INT [] NUMS、int型のターゲット){ ため(INT I = 0、I <nums.length; I ++ ){ ための(int型 J = I + 1、J <nums.length; J ++ ){ もし(NUMS [J] ==ターゲット- NUMS [I]){ 戻り 新しい INTを[] {I、J}。 } } } スロー 新しい例外:IllegalArgumentException( "いいえ2つのサム・ソリューションを" ); }
新しいINT [] = {} --- Java配列ときに新しいオブジェクトアウト
例外:IllegalArgumentException ---パラメータエラー
--2--
公共 のint [] twoSum(INT [] NUMS、int型のターゲット){ 地図 <整数、整数>マップ= 新しい HashMapの<> (); 以下のために(INT ; I <nums.length; iが0 = I ++ ){ map.put(NUMS [i]は、I)。 } のための(INT ; I <nums.length; iが0 = I ++ ){ int型補=ターゲット- NUMS [I]。 もし(!map.containsKey(補体)&& map.get(補体)= I){ 戻り 新しい INT [] {I、map.get(補体)}。 } } スロー 新しいはIllegalArgumentException(「いいえ2サム・ソリューション」); }
map.containKey ---マップ値が含むか否かを判断します