leetcode算法刷题——两数之和
难度系数:简单
题目描述:
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
方法一 (普通):
时间复杂度:O(n^2)
解题思路:
在数组nums中,找两个数和为target,并返回索引位置,首先遍历数组,取数组中每一个数a,接着再在当前数a后面一个数开始遍历到末尾,取数b,每次判定a+b是否等于target,若等于,则返回这两个数的索引,否则则继续重复这个过程。
代码实现(C++):
方法二(更快):
时间复杂度:O(n)
解题思路:
首先定义一个结构体,结构体由一个整型数count和一个整型数index组成,利用桶排序的思想,定义该结构体数组,将其作为桶,长度为数组nums中最大减去最小加一,遍历nums数组,将每一项减去最小值,将其作为索引修改对应结构体中的那一项,将其count加1,index记录为当前nums数组的索引位置,最后遍历结构体数组,将target减去每一项索引所对应的nums数组值,在结构体数组中去找该值是否存在,若存在,则记录下两数的索引。
代码实现(C++):
最后,如果有更好的方法或者有一些建议,请在评论区多多留言,感谢观看~~。