怎样看出一个网站是那个公司做的,中国排名前十的建筑公司,广州深圳,坂田的做网站公司两数之和很经典#xff0c;通常对于首先想到的就是暴力的求解#xff0c;当然这没有问题#xff0c;但是我们如果想要追求更优秀算法#xff0c;就需要去实现更加简便的复杂度。 这里就要提到我们的哈希表法: 我们可以使用unordered_map去实现#xff0c;也可以根据题目通常对于首先想到的就是暴力的求解当然这没有问题但是我们如果想要追求更优秀算法就需要去实现更加简便的复杂度。 这里就要提到我们的哈希表法: 我们可以使用unordered_map去实现也可以根据题目用数组去模拟哈希表两种方式选择合适的就好。 哈希表通过记录来某一键值是否存在如果存在则可进一步访问pair中的second类型变量通过这一系列的组合就可以用哈希表简化大部分问题。 如本道题二数之和就是找寻数组中两个和为target的数并且返回其下标。 那么数据的值就key对应的下标就是value。而且题目有要求:你可以假设每种输入只会对应一个答案。但是数组中同一个元素在答案里不能重复出现,所以我们要先去寻找hash表中键值 target-nums[i]是否存在存在就说明再nums[i]之前就有与nums[i]和为target的值出现所以返回 键值对应的Value(下标)和当前的i即可。 如果没有则将当前的key(数据的值)添加并且记录其对应的下标。
、变式应用: 此道题目同样很容易想到暴力的解法但是对于数据庞大的此道题会出现超时的结果。所以我们就要去优化算法结构正好此题目与两个数据之间的关系有关的所以很容易想到两数之和的哈希表解法。题目不再是返回满足条件的下标组合而是输出满足条件下标的对数。所以这里的key键值和value的意义也要对应修改:key指代出现的数据对24取模后的值value代表数据对24取模之后出现key的次数。举例比如:23出现对24取模操作得到23,那么hash[23]hash[23]的值代表出现次数。所以对于两个数有必须要有关系: ( X Y )%24 0 所以就有下面的关系: 最后得到关系: x%24 (24-y%24)%24 利用这个关系式子,可以找到能与当前数据匹配之后能被24整除的数据对的个数。 具体操作: 1.寻找与当前数据满足条件的数据是否存在如果存在则统计次数。 2.如果没有则将当前数据与24的取模作为key键值取更新value的值。第一步和第二步一定不能反如果倒过来就不满足题目 i j 遍历一次整个数组就可以统计出所有的对数即可。