内容简介:第一种方法就是便利数组,随着数组长度增加,执行时间指数型增加。第二种方式是以空间换时间,把数据存在哈希表里面,最多只用完全遍历一次数组,就能得到结果。题目链接:
没事的时候打算开始玩一玩leetcode,不然天天写代码,却对算法没啥认识还是有点尴尬的。虽说是做题,其实大部分就是为了看看别人牛逼的思路。尽量每天一题把~
1.两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
第一种方法就是便利数组,随着数组长度增加,执行时间指数型增加。
#时间复杂度:O(n^2)
#空间复杂度:O(1)
func twoSum(nums []int, target int) []int {
for firstIndex,firstNum := range nums{
for secondIndex,secondNum := range nums{
if firstIndex != secondIndex && firstNum + secondNum == target{
return []int{firstIndex, secondIndex}
}
}
}
return nil
}
第二种方式是以空间换时间,把数据存在哈希表里面,最多只用完全遍历一次数组,就能得到结果。
#时间复杂度:O(n)
#空间复杂度:O(n)
func twoSumHash(nums []int, target int) []int {
m := make(map[int]int)
for index,num := range nums{
i,ok := m[target - num]
if ok {
return []int{i,index}
}
m[num] = index
}
return nil
}
题目链接: https://leetcode-cn.com/problems/two-sum/description/
作为脑子是条直线的小白,解题的方法是第一种,打死估计都想不到第二种把。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
软件预构艺术(中文版)
Ken Pugh / O'Reilly Taiwan公司 / 东南大学 / 2010-6 / 26.00元
利用经验累积而得到的洞察力开发新的解决方案被称为预构。透过重构而获得的专业知识也属于这类经验,而预构的词源即重构。重构是修改程序或软件系统内部结构的实践,以此在保留其现有行为的基础上改良设计。重构的原因有多种:方便后期增加功能、提高可维护性、提升性能。 本书作者是经验老道的软件开发人员。书中,作者运用他个人和其他众多开发人员的丰富经验,展示由其推衍而得的各项实践方针。这些方针把优秀的开发人员......一起来看看 《软件预构艺术(中文版)》 这本书的介绍吧!