01-两数之和
一、两数之和
题目如下:
也就是输入先给定一个数组,和目标的target值,然后再找出目标为target值的一个索引
C语言代码如下:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
// 先动态分配两个int类型大小的内存空间
int *temp = (int *) malloc(sizeof(int) *2);
// 用两个for循环去遍历该数组,且第二个for循环以该数组的第二个值开始遍历
for(int i =0; i < numsSize;i++) {
for(int j=i+1;j<numsSize;j++) {
// 当遍历出来的值,等于target值时
if(nums[i] + nums[j] == target) {
// 当两值相等时,将该索引存储到分配的内存中
temp[0] = i;
temp[1] = j;
// 元素个数重新赋值
*returnSize = 2;
// 返回该指针变量
return temp;
}
}
}
*returnSize = 0;
return 0;
}
Java版本(暴力枚举[双for循环])
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];
}
}
Java版本(HashMap版)
package day01;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class demo01TwoSum {
public static void main(String[] args) {
int [] nums = {3,2,4};
int [] num = twoSum(nums,6);
System.out.println(Arrays.toString(num));
}
public static int[] twoSum(int[] nums,int target) {
// 创建HashMap对象
Map<Integer, Integer> map = new HashMap<>();
// Map<Key,Value> map = new HashMap<>();
// 遍历数组 // target-nums[i] == 9-2 ==
for(int i = 0 ; i< nums.length;i++) {
// 查看target-nums[i]对应的Value是否存在
if(map.containsKey(target-nums[i])) {
// get返回key所对应的Value值
// 有就创建数组,将该数与所在索引写入该数组
return new int [] {map.get(target-nums[i]),i};
}
//put方法为去HashMap中添加元素// 即 map.put([Key],[Value]);
map.put(nums[i], i);
}
// 非法参数异常
throw new IllegalArgumentException("No two sum solution");
}
}