本文主要是介绍LeetCode 0001 two-sum.go,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
给定一个整数数组nums和一个整数目标值target
请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
思路:
1、使用随机数产生整数切片nums
2、遍历切片nums,求任意两个元素之和,如果和为目标值target,则返回数组下标
注意:
1、随机数不重复
2、随机数为真随机数
package main
import (
"fmt"
"math/rand"
"time"
)
//定义一个切片,存放随机数
var nums []int
var target int
//定义一个二位切片,存放符合条件的元素下标对
var indexOfSlice [][]int
//初始化切片
func initSlice() {
nums = make([]int, 0)
indexOfSlice = make([][]int, 0)
}
//生成随机数切片及目标值
func generateNumsSlice() ([]int, int) {
//生成不同种子
rand.Seed(time.Now().Unix())
//声明一个变量,接收随机数
var slicedLength int
//生成一个随机数,作为切片长度
for {
slicedLength = rand.Intn(10)
//如果生成的随机数为0或1,则跳过后面的乘法操作,避免panic并确保生成的切片长度大于1
if slicedLength == 0 || slicedLength == 1 {
continue
}
target = slicedLength * 10
break
}
//定义死循环,直到达到随机数数量,且无重复元素结束循环
LOOP:
for {
//切片长度*10作为source
num := rand.Intn(slicedLength * 10)
//检查重复num,如果slice中已存在,则重新生成num
for i := 0; i < len(nums); i++ {
if nums[i] == num {
goto LOOP
}
}
//将随机数追加至切片
nums = append(nums, num)
//当切片长度符合设定长度时,跳出循环
if len(nums) == slicedLength {
break
}
}
return nums, target
}
//计算切片中任意两元素之和,并将符合目标值的元素放入二维切片中
func calSum() [][]int {
fmt.Printf("切片内容:%v\n目标值为:%d\n", nums, target)
count := 0
//遍历切片元素,计算两个元素之和
for i := 0; i < len(nums); i++ {
for j := i + 1; j < len(nums); j++ {
sum := nums[i] + nums[j]
//若两元素之和为目标值,则将元素对应下标存入indexOfSlice
if sum == target {
indexOfSlice = append(indexOfSlice, []int{i, j})
count++
}
}
}
return indexOfSlice
}
//打印符合目标值的元素下标
func printIndex() {
if len(indexOfSlice) == 0 {
fmt.Println("没有符合目标值的元素!")
} else {
fmt.Println(indexOfSlice)
}
}
func main() {
initSlice()
generateNumsSlice()
calSum()
printIndex()
}
这篇关于LeetCode 0001 two-sum.go的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!