在哈希表中查找一个key的时间复杂度到底是多少?–leetcode 1
不出意外的话,这应该是我的第一篇博客。
今天下午上课,听的东西完全不进脑子,状态奇差(不过好像很多课我都这样),于是打开几个月没碰的leetcode找找状态,顺便复习一下以前做过的题。没想到才做leetcode 1就发现事情不对劲。闲话少说,先上题。
给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两
个整数,并返回他们的数组下标。你可以假设每个输入只对应一种答案,但是你不能
重复利用这个数组中同样的元素。
实例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回[0, 1]
题目的意思很清晰了,不做解释。而这道题在leetcode上难度是easy。看到这种题,只要当时不是没睡醒,基本上都是能两下子就想到解法的。既然这样,那就要想办法优化算法,尽量降低时间复杂度和空间复杂度,尤其是时间复杂度。而我一拿到这个题的时候,脑子里马上就冒出来暴力搜索。
解法1:暴力搜索
暴力搜索,外层循环遍历一遍数组,内层循环也遍历一遍数组。这样的时间复杂度是O(n^2)。显然,这是不能让人满意的。
解法2:排序后二分查找
将数组排序,然后一层循环遍历一遍数组,对于数组中的每个元素it,在数组中二分查找target - it。排序的时间复杂度是O(n<