這個題某次面試中面試官問到了,在leetcode上也有
題目描述:
給定乙個整數陣列nums
和乙個目標值target
,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。
示例:
給定 nums = [2, 7, 11, 15], target = 9第一種方法就是暴力法,去遍歷,找到和當前元素和相等的數字下標,返回。這種方法的時間複雜度為n的二次方,空間複雜度為o(1)因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
第二種方法是採用雜湊的方法,根據雜湊的資料結構,他每次訪問的複雜度基本為o(1),對於陣列中的每個元素,在將其put進hashmap的時候,將元素的值放進key中,元素的下標放在value中,如果要找和為某個指定值的其他元素,那麼使用hashmap的containskey的方法,找出那個值,最後按要求返回即可
第三種方法也是雜湊,與上面的方法類似,但是這次是在put的時候就判斷是否在hashmap中存在乙個值與元素的值相等。如果存在就不用進行後續的操作了,後兩種方法的時間複雜度和空間複雜度都是0(n)
第二種方法的**如下:
public class num1a ;
int target = 9;
int result = twosum(nums, target);
int i;
system.out.print("[");
for ( i = 0; i < result.length-1; i++)
system.out.print(" ");
system.out.print(result[i]);
system.out.print("]");
}public static int twosum(int nums, int target)
for (int i = 0; i < nums.length; i++) ;}}
throw new illegalargumentexception("no two sum solution");
}}
第三種方法的**如下;
public class num1b ;
int target = 9;
int result = twosum(nums, target);
int i;
system.out.print("[");
for (i = 0; i < result.length - 1; i++)
system.out.print(" ");
system.out.print(result[i]);
system.out.print("]");
}public static int twosum(int nums, int target) ;}}
throw new illegalargumentexception("no two sum solution");
}}
找出排序陣列中和為給定值的兩個數字
題目 輸入乙個已經按公升序排序過的陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是o n 如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如 a sum 15,輸出6,9.思路 因為陣列是有序的,因此我們可設兩個指標left,right,分別從頭和從尾部遍...
找出陣列中和為10的元素的組合
find all subsets that sum upto 10.example int arr subsets are 4,5,1 4,6 2,3,5 etc.include stdafx.h include using namespace std void printvec std vecto...
找出陣列中和為N 1的的所有組合
乙個整數數列,元素取值可能是1 n n是乙個較大的正整數 中的任意乙個數,相同數值不會重複出現。設計乙個演算法,找出數列中符合條件的數對的個數,滿足數對中兩數的和等於n 1。複雜度最好是o n 如果是o n2 則不得分 方法一 排序後,定義兩個指標begin,end分別指向陣列的第乙個和最後乙個元素...