搜索
您的当前位置:首页正文

Java(C++)之基础算法题——两数之和

来源:步旅网

示例:

有一个数组,和一个目标值,请在数组中找出和为目标值的两个数,并这两个数的下标。
FE: nums = [2 ,7 ,11,15],target = 9
num[ 0 ] + num[ 1 ] = 2 + 7 = 9
返回的下标是[ 0,1 ]

Moth ①:遍历每个元素,查找一个值等于 target - x

C++代码:

int *TwoSum(int *nums, int target,int length)
{
	for (int i = 0; i < length; i++)
	{
		for (int j = i + 1; j < length; j++)
		{
			if (nums[i] == target - nums[j])
			{
				printf("%d = %d - %d\n", nums[i], target, nums[j]);				
				printf("%d %d \n", i, j);			
				return new int[2] {i, j};
			}
			else
			{
				printf("%d != %d - %d\n", nums[i], target, nums[j]);				
			}
		}
	}
}

Java
Moth②:二遍历哈希表,查找元素(target-nums[i])是否存在表中。使用STL map

public int[] twoSum(int[] nums, int target) {
	Map<Integer, Integer> map = new HashMap<>();
	for (int i = 0; i < nums.length; i++) {//第一次迭代添加元素
		map.put(nums[i], i);
	}
	for (int i = 0; i < nums.length; i++) {//第二次迭代查找元素
		int complement = target - nums[i];
		if (map.containsKey(complement) && map.get(complement) != i) {
			return new int[] { i, map.get(complement) };
		}
	}
	throw new IllegalArgumentException("No two sum solution");
}

Java
Moth③:一遍哈希表

public int[] twoSum(int[] nums, int target) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {//迭代时插入元素并查找比较
        int complement = target - nums[i];
        if (map.containsKey(complement)) {
            return new int[] { map.get(complement), i };
        }
        map.put(nums[i], i);
    }
    throw new IllegalArgumentException("No two sum solution");
}

注:
欢迎各位笔友在评论栏提出宝贵的意见!
Together with progress!!!

因篇幅问题不能全部显示,请点此查看更多更全内容

Top