双重for循环暴力解题
Java
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int i =0; i<nums.length;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]+nums[j]==target){
return new int[]{i,j};
}
}
}
return new int[0];
}
}
C++
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for(int i=0;i<nums.size();i++){
for(int j=i+1;j<nums.size();j++){
if(nums[i]+nums[j]==target){
return {i,j};
}
}
}
return{};
}
};
Go
func twoSum(nums []int, target int) []int {
var n = len(nums)
for i :=0;i<n;i++{
var x =nums[i]
for j := i+1;j<n;j++{
if nums[j] ==target -x{
return []int{i,j}
}
}
}
return []int{}
}
哈希表解决
Java
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> hashtable = new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++){
if(hashtable.containsKey(target - nums[i])){
return new int[]{hashtable.get(target-nums[i]),i};
}
hashtable.put(nums[i],i);
}
return new int[0];
}
}
C++
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
std::unordered_map <int,int>map;
for(int i=0;i<nums.size();i++){
auto iter = map.find(target - nums[i]);
if(iter != map.end()){
return {iter->second,i};
}
map.insert(pair<int,int>(nums[i],i));
}
return {};
}
};
Go
func twoSum(nums []int, target int) []int {
m :=make(map[int]int)
for index, val := range nums{
if preIndex, ok := m[target-val]; ok{
return []int {preIndex,index}
}else{
m[val] = index
}
}
return []int{}
}