前言
因为读研涉及的学习需要用到Go语言,一直想提前学一下。前几天刷公众号看到Carl哥发布了最新一期的训练营通知,临时起意准备借机学习一下golang。
之前有断断续续用C刷过代码随想录,所以这也算二刷了。因为从周一才开始看Go语言的相关语法,所以本次刷题主要目的是学习go的语法,顺带强化一下算法吧~
704.二分查找
题目链接:704二分查找.
思路
- 变量 主要记住三个关键量:左值(left)、右值(right)、中间值(mid);
- mid的变化 left = mid+1;
解题代码
func search(nums []int, target int) int {
var right int = len(nums)
var left int = 0
var mid int = 0
for left < right{
mid = left + (right-left)/2
if nums[mid] == target{
return mid
}else if nums[mid] > target{
right = mid
}else if nums[mid] < target{
left = mid+1 //核心:左值加1
}
}
return -1
}
pass
27. 移除元素
题目链接:27. 移除元素.
思路
这题当时C做过印象很深,设置两个索引可以实现高效解题。有个小插曲,给变量length赋值的时候一直报错,没找着原因,过了好大一个片刻才反应过来len()写成了lens(),有趣的是lens()也给高亮了,这家伙给疏忽了。
- 双索引 设置i,j两个索引;
- 利用索引更新
解题代码
func removeElement(nums []int, val int) int {
var i,j int = 0,0 //两个索引
var length int = len(nums)
for i=0;i<length;i++ {
if nums[i] != val{
nums[j] = nums[i]
j++
}
}
return j
}