常用算法 golang

常用算法 golang 

func bin_search(nums []int, target int) int {
	left := 0
	right := len(nums) - 1
	for left <= right {
		mid := left + (right-left)/2
		if nums[mid] == target {
			return mid
		} else if nums[mid] < target {
			left = mid + 1
		} else if nums[mid] > target {
			right = mid - 1
		}

	}
	return -1
}

//二分查找(有相同的取最左边界)
func left_bin_search(nums []int, target int) int {
	left := 0
	right := len(nums) - 1

	for left <= right {
		mid := left + (right-left)/2
		if nums[mid] == target {
			right = mid - 1
		} else if nums[mid] < target {
			left = mid + 1
		} else if nums[mid] > target {
			right = mid - 1
		}
	}
	if left == len(nums) {
		return -1
	}
	if nums[left] != target {
		return -1
	}
	return left
}
//二分查找(有相同的取最右边界)
func right_bin_search(nums []int, target int) int {
	left := 0
	right := len(nums) - 1

	for left <= right {
		mid := left + (right-left)/2
		if nums[mid] == target {
			left = mid + 1
		} else if nums[mid] < target {
			left = mid + 1
		} else if nums[mid] > target {
			right = mid - 1
		}
	}
	if right < 0 {
		return -1
	}
	if nums[right] != target {
		return -1
	}
	return right
}


func lengthOfLongestSubstring(s string) int {
	retVal := -1
	window := make(map[byte]int)
	left, right := 0, 0
	for right < len(s) {
		c := s[right]
		right++
		window[c]++
		for window[c] > 1 {
			d := s[left]
			left++
			window[d]--
		}

		if right-left > retVal {
			retVal = right - left
		}
	}
	return retVal

}

// 四方向涂0
func dfs(x int, y int, grid [][]byte) {
	if grid[x][y] == 1 {
		grid[x][y] = 0
		if x > 0 {
			dfs(x-1, y, grid)
		}
		if x < len(grid)-1 {
			dfs(x+1, y, grid)
		}
		if y > 0 {
			dfs(x, y-1, grid)
		}
		if y < len(grid[x])-1 {
			dfs(x, y+1, grid)
		}
	}
}
//寻找岛屿
func solve(grid [][]byte) int {
	// write code here
	count := 0
	for i := 0; i < len(grid); i++ {
		for j := 0; j < len(grid[i]); j++ {
			if grid[i][j] == 1 {
				count++
				dfs(i, j, grid)
			}
		}
	}
	return count
}


// 版本号比较
func compare(version1 string, version2 string) int {
	// write code here
	len1 := len(version1)
	len2 := len(version2)
	i := 0
	j := 0
	for i < len1 || j < len2 {
		num1 := 0
		num2 := 0
		for i < len1 && version1[i] != '.' {
			num1 = num1*10 + int(version1[i]-'0')
			i++
		}
		i++
		for j < len2 && version2[j] != '.' {
			num2 = num2*10 + int(version2[j]-'0')
			j++
		}
		j++

		if num1 > num2 {
			return 1
		}

		if num1 < num2 {
			return -1
		}
	}

	return 0
}
func Min(x, y int) int {
	if x < y {
		return x
	}
	return y
}
//最小步长
func minCostClimbingStairs(cost []int) int {
	// write code here
	dp := make([]int, len(cost)+1)
	for i := 2; i < len(cost)+1; i++ {
		dp[i] = Min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
	}
	return dp[len(cost)]
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值