从 Two Sum 快学 Go 基础语法

两数之和最容易想到的方法是通过暴力枚举 ,通过嵌套循环的方式枚举数组中每一个 x,在剩余元素中是否存在 target-x

Go 复制代码
func twoSum(nums []int, target int) []int {
    length := len(nums)
    for i :=0; i < length; i++ {
        for j := i+1; j < length; j++ {
             v_s := nums[i]
             v_c := nums[j]
            if v_c + v_s == target {
                return []int{i, j}
            }
        }
    }
    return nil
}

从代码中,涉及到变量的定义、循环和条件判断。

变量的定义与初始化

基础类型变量:

Go 复制代码
// 声明: var [变量名] [数据类型]
var x int 
// 赋值:[变量名] = [具体值]
x = 5

// 简写:[变量名] := [具体值]
y := 6

数组类型:

Go 复制代码
// 声明:var [变量名] [数组长度] [数据类型]
var arr [2]int
// 赋值:[变量名][数组下标] = [具体值]
arr[0] = -1

// 简写:[变量名] := [数组长度][数据类型]{具体值}
arr2:= [2]int{-1, 1}

对于声明与定义变量,JavaScript 习惯性的用 const 修饰 length ,在这里是不被允许的。为什么呢,Go 作为强类型的静态语言要求 length 的值在编译时确认 ,而不是在运行时期,因此无法length 视作常量。

循环与条件控制

此处 Go 与 JavaScript 基本相似,主要区别是 Go 不需要括号包裹判断条件。


暴力枚举法的时间复杂度过高,可以考虑哈希表法 用空间换时间。创建哈希表后,对于数组中每一个 x 都检查哈希表中是否存在 target -x

Go 复制代码
func twoSum(nums []int, target int) []int {
    set := make(map[int]int)
    for i :=0; i < length; i++ {
        idx, res := set[target - nums[i]]
        if res {
            return []int{i, idx}
        }
        set[nums[i]] = i
    }
    return nil
}

此时,出现了新知识点哈希表的使用

哈希表

Go 称之为映射,且需要通过内置的 make 函数创建

Go 复制代码
// 初始化 [变量名] := make(map[key数据类型][value数据类型])
m := make(map[string]int)

// 插入 
m["a"] = 1

// 判断 key 存在
value, ok := m["c"] // ok: boolean,key 存在则为 true

小结

边学边练,日拱一卒!我们已经从 twosum 中学习到 Go 中关于变量的定义和初始化、循环和条件控制以及哈希表的使用啦。

相关推荐
88号技师2 小时前
2024年12月一区SCI-加权平均优化算法Weighted average algorithm-附Matlab免费代码
人工智能·算法·matlab·优化算法
IT猿手2 小时前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab
88号技师2 小时前
几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
我要学编程(ಥ_ಥ)3 小时前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先
埃菲尔铁塔_CV算法3 小时前
FTT变换Matlab代码解释及应用场景
算法
许野平4 小时前
Rust: enum 和 i32 的区别和互换
python·算法·rust·enum·i32
chenziang14 小时前
leetcode hot100 合并区间
算法
chenziang14 小时前
leetcode hot100 对称二叉树
算法·leetcode·职场和发展
szuzhan.gy4 小时前
DS查找—二叉树平衡因子
数据结构·c++·算法
一只码代码的章鱼5 小时前
排序算法 (插入,选择,冒泡,希尔,快速,归并,堆排序)
数据结构·算法·排序算法