两数之和(无序)3
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那
两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。
但是,数组中同一个元素在答案里不能重复出现。
1、暴力
- 之前那个i、j从两头搜的方法,是针对有序数组的,所以不行,这个就是从头两个指针,一次遍历就好了
- 新建数组:int[] index=new int[2];
class Solution {
public int[] twoSum(int[] nums, int target) {
int size=nums.length;
int[] index=new int[2];// int[]就是new的类型;
for(int i=0;i<size-1;i++){//i不取最后一个数字
for(int j=i+1;j<size;j++){
if(nums[i]+nums[j]==target){
index[0]=i;
index[1]=j;
return index;
}
}
}
return index;
}
}
2、空间换时间 (低复杂度)
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer>map=new HashMap<Integer,Integer>();
int len=nums.length;
for(int i=0;i<len;i++){
//键对值,键nums[i],对 i
if(map.containsKey(target-nums[i])){
//返回具体下标,即返回num[i]的下标i
//target - nums[i]的下标map.get(target - nums[i])
return new int[]{map.get(target - nums[i]), i};
//return new int[]{nums[i],target-nums[i]};这个是返回的具体的值
}
map.put(nums[i],i);
}
return new int[]{-1,-1};
}
}
有序数组找特定值 167
给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于
目标数 target 。你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。
- 新建值为{-1,-1}的数组操作:new int[]{-1, -1};
- 给数组添加元素index[0]=i+1;不是add
- 下标是从1开始的
class Solution {
public int[] twoSum(int[] numbers, int target) {
int size=numbers.length;
if(size==0){
return new int[]{-1,-1};
}
int i=0;
int j=size-1;
int[] index=new int[2];
while(i<j){
if(numbers[i]+numbers[j]==target){
index[0]=i+1;
index[1]=j+1;
return index;//return new int[]{-1,-1};
}
else if(numbers[i]+numbers[j]<target){
i++;
}
else if(numbers[i]+numbers[j]>target){
j--;
}
}
return index;// return new int[]{-1,-1};
}
}
返回数组里的数字
class Solution {
public int[] twoSum(int[] nums, int target) {
int size=nums.length;
int i=0,j=size-1;
while(i<j){
if(nums[i]+nums[j]==target){
return new int[]{nums[i],nums[j]};
}
while(nums[i]+nums[j]>target){
j--;
}
while(nums[i]+nums[j]<target){
i++;
}
}
return new int[]{};
}
}