Go教程

LeetCode 0001 two-sum.go

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!