===================================================
//**冒泡排序
func BubbleSort(arr *[5]int){
n :=len(*arr)
temp := 0
for i := 0; i < n-1; i++ {
for j :=i+1; j < n; j++ {
if (*arr)[j] < (*arr)[i] {
temp = (*arr)[i]
(*arr)[i] = (*arr)[j]
(*arr)[j] = temp
}
}
}
fmt.Println("排序后arr=",(*arr))
}
===================================================
//三种排序 选择排序 8万数据 用时:12秒
// 插入排序 8万数据 用时:4秒
// 快速排序 8万数据 用时:0秒
//**选择排序
func selectSort(arr *[5]int){
n := len(arr)
for i := 0; i < n; i++ {
k := i
for j := i+1; j < n; j++ {
if arr[j] < arr[k] {
k = j
}
}
if k != i {
temp := arr[i]
arr[i] = arr[k]
arr[k] = temp
}
}
fmt.Println(*arr)
}
func main(){
arr := [5]int{10,34,19,100,80}
selectSort(&arr)
}
===================================================
//*插入排序
func InsertSort(arr *[5]int){
n:=len(arr)
for i:=1;i<n;i++{
tmp:=arr[i]
j:=i-1
for j>=0 && arr[j]>tmp{
arr[j+1]=arr[j]
j--
}
if j+1 == i{
continue
}
arr[j+1]=tmp
}
}
func main(){
arr:=[5]int{2,34,5,65,6}
InsertSort(&arr)
fmt.Println(arr)
}
===================================================
//left 表示 数组左边的下标
//right 表示 数组右边的下标
//arr 表示要排序的数组
//*快速排序
func quickSortV2(arr []int, low, hight int) {
if low >= hight {
return
}
left, right := low, hight
pivot := arr[(low+hight)/2] // 这里的经验值取的是中间数,经过 Benchmark 测试,确实比较优秀
for left <= right {
// 从左边开始迭代
// 左边的数如果比 pivot 小,那么就应该将他放在左边,继续向右滑动,遇到一个比他大的为止
for arr[left] < pivot {
left++
}
// 右边的数如果比 pivot 大,那么就应该将他放在右边,继续向左滑动,遇到一个比他小的为止
for arr[right] > pivot {
right--
}
// 这里进行一次交换,将上面碰到的大数和小数交换一次
//left 继续右走,right 继续左走 注意这里还不一定相遇,去继续执行上面的逻辑
if left <= right {
arr[left], arr[right] = arr[right], arr[left]
left++
right--
}
}
quickSortV2(arr, low, right)
quickSortV2(arr, left, hight)
}
/
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
arr := [6]int{-9,78,0,23,-576,70}
quickSort(arr,0,len(arr)-1)
}
func quickSort(arr [6]int, left, right int) {
if left >= right {
return
}
cur, lo := left+1, left
for cur <= right {
if arr[cur] <= arr[left] {
arr[lo+1], arr[cur] = arr[cur], arr[lo+1]
lo++
}
cur++
}
arr[left], arr[lo] = arr[lo], arr[left]
quickSort(arr, left, lo-1)
quickSort(arr, lo+1, right)
//fmt.Println(arr)
//return
}
//这个版本是所有快速排序中,看起来比较难以理解,只有一个指针,从左到右滑动,设计非常巧妙。
========================================
///*递归使用
package main
import "fmt"
// Go的递归调用和类型转换
// 递归,就是在运行的过程中调用自己。
func Factorial(x int) (result int) {
if x == 0 {
result = 1;
} else {
result = x * Factorial(x - 1);
}
return;
}
func Fibonacci(n int) int {
if n < 2 {
return n
}
return Fibonacci(n-2) + Fibonacci(n-1)
}
func main(){
// go语言的递归样例,
//go语言实现阶乘
var num int = 10
fmt.Println(Factorial(num))
// go实现斐波那契
fmt.Println(Fibonacci(num))
}
===================================================
===================================================
//*二分
package main
import "fmt"
func BinarySearch(arr *[6]int,leftIndex int,rightIndex int ,findVal int ){
if leftIndex > rightIndex{
fmt.Printf("%v中找不到\t元素%v\n",(*arr),findVal)
return
}
//先找到中间下标
midddle := (leftIndex+rightIndex)/2
if (*arr)[midddle] >findVal {
//说明要查找的数在左边 就应该向 leftIndex ---- (middle - 1)再次查找
BinarySearch(arr,leftIndex,midddle-1,findVal)
}else if (*arr)[midddle] < findVal{
//如果 arr[middle] < findVal , 就应该向 middel+1---- rightIndex
BinarySearch(arr,midddle+1,rightIndex,findVal)
}else {
//找到了
fmt.Printf("%v中找到元素%v,下标为%v\n",(*arr),findVal,midddle)
}
}
func main() {
ArraryNum := [6]int{1,8, 10, 89, 1000, 1234}
ArraryNum2 := [6]int{8,200, 300, 889, 1000, 1234}
BinarySearch(&ArraryNum,0,len(ArraryNum),1234)
BinarySearch(&ArraryNum2,0,len(ArraryNum),300)
BinarySearch(&ArraryNum,0,len(ArraryNum),-8)
BinarySearch(&ArraryNum2,0,len(ArraryNum),30)
}
[1 8 10 89 1000 1234]中找到元素1234,下标为5
[8 200 300 889 1000 1234]中找到元素300,下标为2
[1 8 10 89 1000 1234]中找不到 元素-8
[8 200 300 889 1000 1234]中找不到 元素30
==================================================//**反转单链表1
//反转链表的golang实现
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
package main
import "fmt"
//链表节点
type ListNode struct {
Val int
Next *ListNode
}
//反转链表的实现
func reversrList(head *ListNode) *ListNode {
cur := head
var pre *ListNode = nil
for cur != nil {
pre, cur, cur.Next = cur, cur.Next, pre //这句话最重要
}
return pre
}
func main() {
head := new(ListNode)
head.Val = 1
ln2 := new(ListNode)
ln2.Val = 2
ln3 := new(ListNode)
ln3.Val = 3
ln4 := new(ListNode)
ln4.Val = 4
ln5 := new(ListNode)
ln5.Val = 5
head.Next = ln2
ln2.Next = ln3
ln3.Next = ln4
ln4.Next = ln5
pre := reversrList(head)
fmt.Println(pre)
}
===================================================
查找不重复最长字串
package main
import "fmt"
func lengthOfNonRepeatingSubStr(s string) int {
lastMake := make(map[rune]int)
start := 0
maxLength := 0
for i, ch := range []rune(s) {
if lastI, ok := lastMake[ch]; ok && lastI >= start {
start = lastMake[ch] + 1
}
if i-start+1 > maxLength {
maxLength = i - start + 1
}
lastMake[ch] = i
}
return maxLength
}
func main() {
fmt.Println(lengthOfNonRepeatingSubStr("abcabcbb"))
fmt.Println(lengthOfNonRepeatingSubStr("bbbbb"))
fmt.Println(lengthOfNonRepeatingSubStr("黑化肥发黑会挥发"))
}
===================================================
大整数加法
func stringReverse(str string) string {
r := []rune(str)
for i, j := 0, len(r)-1; i < j; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
func add(str1 string, str2 string) string {
if len(str1) < len(str2) {
str1 = strings.Repeat("0", len(str2)-len(str1)) + str1
} else if len(str1) > len(str2) {
str2 = strings.Repeat("0", len(str1)-len(str2)) + str2
}
str1 = stringReverse(str1)
str2 = stringReverse(str2)
count := len(str1)
nums := make([]byte, count)
carry := false
for i := 0; i < count; i++ {
sum := str1[i] - '0' + str2[i] - '0'
if carry {
sum++
}
if sum > 9 {
sum = sum - 10
carry = true
} else {
carry = false
}
nums[i] = sum + '0'
}
result := stringReverse(string(nums))
if carry {
result = "1" + result
}
return result
}
===================================================
两个数组求交集
思路:把两个数组合并成一个数组,然后通过 hash 表找出数组中重复的元素
package main
import "fmt"
func ArrayIntersection(arr []int,arr1 []int)[]int{
var intersection []int
arr=append(arr,arr1...)
lastMake :=make(map[int]int)
for _,v:=range arr{
if lastMake [v]==1{
intersection=append(intersection,v)
}else{
lastMake [v]=1
}
}
return intersection
}
func main() {
arr1 := []int{1, 2, 3, 4, 5, 6}
arr2 := []int{5, 6, 7, 8, 9, 0}
fmt.Println(ArrayIntersection(arr1, arr2))
}
字符串反转
package main
func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i < j; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
func main() {
a := "Hello, 世界"
println(a)
println(Reverse(a))
}
===================================================
//*闭包
func AddUpper() func(int) int {
var n int = 10
return func(x int) int {
n = n + x
return n
}
}
func main(){
f := AddUpper()
fmt.Println(f(1)) //11
fmt.Println(f(2)) //13
fmt.Println(f(3)) //16
}
例子
-
输入数组= [1、3、5、6、1] =>重复元素为1;
-
输入数组= [1、3、5、6、7] =>返回-1
解决这个问题的方法
-
步骤1: 定义一个接受数组的方法。
-
第2步: 声明访问过的映射。
-
步骤3:迭代给定的数组。如果该元素存在于已访问映射中,则返回该元素。
-
步骤4:否则,返回-1。
package main
import "fmt"
func duplicateInArray(arr []int) int{
lastMake := make(map[int]bool, 0)
for i:=0; i<len(arr); i++{
if lastMake [arr[i]] == true{
return arr[i]
} else {
lastMake [arr[i]] = true
}
}
return -1
}
func main(){
fmt.Println(duplicateInArray([]int{1, 4, 7, 2, 2}))
fmt.Println(duplicateInArray([]int{1, 4, 7, 2, 3}))
}
输出结果
2
-1
Go语言:数组中重复的数据
题目:给定一个题目:给定一个整数数组 a ,其中 1 <= a[i] <= n (n为数组长度),其中有些元素出现 两次 而其他元素出现 一次 。
找到所有出现 两次 的元素。
你可以不用任何额外空间并在 O(n) 时间复杂度内解决这个问题吗?
示例:
输入: [ 4, 3, 2, 7, 8, 2, 3, 1 ]
输出: [ 2, 3 ]
解法一:使用 map 。用 map 中的 key 值存储数组中的每个元素,value 存储其对应出现次数。最后输出 value 值为 2 的 key 即可。
package main
import "fmt"
func main() {
fmt.Println(findDuplicates([]int{1, 4, 7, 2, 2,1,7,8,9,3}))
}
func findDuplicates(arr []int) []int {
lastMake := make(map[int]bool,1)
var res []int
for i:=0;i<len(arr);i++{
if lastMake[arr[i]]==true{
res=append(res,arr[i])
}else{
lastMake[arr[i]]=true
}
}
return res
}
func findDuplicates(nums []int) []int {
var lastMake map[int]int
lastMake = make(map[int]int)
var i int
for i = 0; i < len(nums); i++ {
lastMake [nums[i]]++
}
var res []int
for key, value := range lastMake {
if value == 2 {
res = append(res, key)
}
}
return res
}
解法三:利用索引号,巧妙进行哈希利用索引号,巧妙进行
func getAbs(num int) int {
if num >= 0 {
return num
}
return -num
}
func findDuplicates(nums []int) []int {
var i int
var res []int
for i = 0; i < len(nums); i++ {
index := getAbs(nums[i]) - 1 //获取数值nums[i]对应的下标index
if nums[index] <= 0 { //如果nums[index]为负数,表示nums[i]曾经出现过
res = append(res, getAbs(nums[i]))
}
nums[index] = -nums[index] //访问一次,变为相反数,作为标记
}
return res
}
===================================================
//栈
//使用数组来模拟一个栈的使用。
type Stack struct{
MaxTop int //表示我们栈最大可以存放数个数
Top int //表示栈顶,因为栈顶固定,因此我们直接使用Top
arr [5]int //数组模拟栈
}
//入栈
func (this *Stack) Push(val int) (err error){
//先判断栈是否满了
if this.Top == this.MaxTop -1 {
fmt.Println("stack full")
return errors.New("stack full")
}
this.Top++
//放入数据
this.arr[this.Top] = val
}
//出栈
func (this *Stack) Pop() (val int,err error){
//判断栈是否空
if this.Top == -1 {
fmt.Println("stack mepty!")
return 0,errors.New("stack empty")
}
//先取值,再 this.Top--
var = this.arr[this.Top]
this.Top--
return val,nil
}
//遍历栈,从栈顶开始遍历
func (this *Stack) List(){
//判断栈是否空
if this.Top == -1{
fmt.Println("stack empty")
return
}
//curTop := this.Top
for i := this.Top; i>=0; i-- {
fmt.Println("arr[%d]=%d\n",i,this.arr[i])
}
}
func main(){
stack := &Stack{
MaxTop : 5,
Top : -1,
}
//入栈
stack.Push(1)
stack.Push(2)
stack.Push(3)
stack.Push(4)
stack.Push(5)
//显示
stack.List() val,_ := stack.Pop()
fmt.Println("出栈",val)
stack.List()
}
===================================================
===================================================
//错误处理
func test(){
//使用defer + recover 来捕获和处理异常
defer func(){
err := recover() // recover() 捕获异常
if err != nil{
fmt.Println("err=",err)
}
}()
num1 := 10
num2 := 20
res := num1 /num2
fmt.println("res=",res)
}
func main(){
test()
for{
fmt.Println("")
time.Sleep(time.Second)
}
}
===================================================
===================================================
//斐波那契
func fbn(n int) ([]uint64){
fbnSlice := make([]uint64,n)
fbnSlice[0]=1
fbnSlice[1]=1
for i := 2; i<n; i++ {
fbnSlice[i] = fbnSlice[i - 1] + fbnSlice[i-2]
}
return fbnSlice
}
func main(){
fnbSlice := fbn(10)
fmt.Println("fnbSlice",fnbSlice)
}
===================================================
package main
import "fmt"
//*二叉树
type Hero struct{
No int //编号
Name string
Left *Hero //左边指针
Right *Hero //右边指针
}
//前序
func PreOrder(node *Hero){
if node != nil {
fmt.Printf("no=%d name=%s\n",node.No,node.Name)
PreOrder(node.Left)
PreOrder(node.Right)
}
}
//中序
func InfixOrder(node *Hero){
if node != nil {
InfixOrder(node.Left)
fmt.Printf("no=%d name=%s\n",node.No,node.Name)
InfixOrder(node.Right)
}
}
//后序
func PostOrder(node *Hero){
if node != nil {
PostOrder(node.Left)
PostOrder(node.Right)
fmt.Printf("no=%d name=%s\n",node.No,node.Name)
}
}
func main(){
root := &Hero{
No : 1,
Name : "aa",
}
left1 := &Hero{
No : 2,
Name : "bb",
}
node10 := &Hero{
No : 10,
Name : "tom",
}
node12 := &Hero{
No : 12,
Name : "tomA",
}
left1.Left = node10
left1.Right = node12
right1 := &Hero{
No : 3,
Name : "cc",
}
root.Left = left1
root.Right = right1
right2 := &Hero{
No : 4,
Name : "dd",
}
right1.Right = right2
PreOrder(root)
}
/*结果:
no=1 name=aa
no=2 name=bb
no=10 name=tom
no=12 name=tomA
no=3 name=cc
no=4 name=dd
*/
===================================================
===================================================
//顺序查找
names := [4]string{"a","b","c","d","e","f"}
var heroName = ""
fmt.Scanln(&heroName)
for i := 0;i<len(names); i++ {
if heroName ==names[i] {
fmt.Printf("找到",heroName,i)
break
} else if i==(len(names)-1) {
fmt.Printf("没找到",heroName)
}
}
===================================================
===================================================
//map排序
map1 := make(map[int]int,10)
map1[10] = 100
map1[1]=13
map1[4]=56
var keys []int
for k,_:= range map1 {
keys = append(keys,k)
}
sort.Ints(keys)
for _,k := range keys {
fmt.Printf("map1[%v]=%v \n",k,map1[k])
}
===================================================
//**协程与管道
//write Data
func writeData(intChan chan int){
for i := 1;i <= 50; i++ {
//放入数据
intChan<- i
}
close(intChan)//关闭
}
//read data
func readData(intChan chan int,exitChan chan bool){
for {
v,ok := <-intChan
if !ok {
break
}
fmt.Printf("readData 读到数据=%v\n",v)
}
//readData 读取完数据后,任务完成
exitChan<- true
close(exitChan)
}
func main(){
//创那建两个管道
intChan := make(chan int,50)
exitChan := make(chan bool,1)
go writeData(intChan)
go readData(intChan,exitChan)
for {
_,ok := <-exitChan
if !ok {
break
}
}
}
===================================================
func main() {
intChan := make(chan int, 20)
exitChan := make(chan bool, 1)
go func(intChan chan int){
for i:=0; i< 20; i++ {
intChan<- (i%2 + 1)
}
close(intChan)
}(intChan)
go func(intChan chan int, exitChan chan bool) {
for{
v, ok := <-intChan
if ok {
fmt.Println(v)
}else{
exitChan<- true
close(exitChan)
break
}
}
}(intChan, exitChan)
for {
_, ok := <- exitChan
if !ok {
break
}
}
}
==================================================
golang goroutine顺序循环打印ABCpackage main
import "fmt"
func main() {
chan1,chan2,chan3,chan4:=make(chan bool,1),make(chan bool,1),make(chan bool,1),make(chan bool,1)
n:=20
go func(){
for i:=1;i<=n;i+=3{
<-chan1
fmt.Println("A")
chan2<-true
}
}()
go func(){
for i:=2;i<=n;i+=3{
<-chan2
fmt.Println("B")
chan3<-true
}
}()
go func(){
for i:=3;i<=n;i+=3{
if i == 3{
chan1 <- true
}
<-chan3
fmt.Println("C")
chan1<-true
}
chan4<-true
}()
<-chan4
}
/**
A
B
C
A
B
C
A
B
C
**/
2
package main
import "fmt"
var chan1 = make(chan bool, 1)
var chan2 = make(chan bool)
var chan3 = make(chan bool,1)
var index = make(chan bool, 1)
func func1() {
for i := 1;i<=10;i++ {
<-chan1
fmt.Println("A")
chan2 <- true
}
}
func func2() {
for i := 1;i<=10 ;i++ {
<-chan2
fmt.Println("B")
chan3 <- true
}
}
func func3(){
for i := 1;i<=10 ;i++ {
<-chan3
fmt.Println("C")
chan1<- true
}
index<-true
}
func main() {
chan1 <- true
go func1()
go func2()
go func3()
<-index
}
go语言实现两个goroutine交替执行打印数字和字母,效果:12AB34CD56EF...
var chan1 = make(chan bool, 1)
var chan2 = make(chan bool)
var index = make(chan bool, 1)
func func1() {
for i := 1; i < 26; i += 2 {
// 2, 取走chan1里的元素,继续运行,打印两个数字
<-chan1
fmt.Print(i)
fmt.Print(i + 1)
// 3, 给chan2 放入一个元素,等待取走元素
chan2 <- true
}
}
func func2() {
for i := 'A'; i <= 'Z'; i += 2 {
// 4, chan2 取出元素,执行打印两个字符 ,
<-chan2
fmt.Print(string(i))
fmt.Print(string(i+1))
// 5, chan1 接收一个元素,进入阻塞状态,等待取走元素,进入第2步,2345步一直循环直到打印完
chan1 <- true
}
// 6, 结束循环,index通道接收一个元素,进入阻塞状态,等待取走
index <- true
}
func main() {
// 1, chan1 里放一个值,进入阻塞状态,等待取走元素
chan1 <- true
go func1()
go func2()
// 7, index通道取走元素,继续往下执行
<-index
// 结果: 12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ
}
基于3个goroutine交替顺序打印自然数
//1
package main
import "fmt"
func main() {
chA,chB,chC,index:=make(chan bool,1),make(chan bool,1),make(chan bool,1),make(chan bool,1)
go func(){
for i:=1;i<=20;i+=3{
<-chA
fmt.Println("[A]=",i)
chB<-true
}
}()
go func(){
for i:=2;i<=20;i+=3{
<-chB
fmt.Println("[B]=",i)
chC<-true
}
}()
go func(){
for i:=3;i<=20;i+=3{
if i==3{
chA<-true
}
<-chC
fmt.Println("[C]=",i)
chA<-true
}
index<-true
}()
<-index
}
//2
func main() {
chA, chB, chC := make(chan string), make(chan string), make(chan string)
go func() {
for i := 1; ; {
select {
case <-chA:
fmt.Println("[A]:", i)
chB <- "B"
i += 3
}
}
}()
go func() {
for i := 2; ; {
select {
case <-chB:
fmt.Println("[B]:", i)
chC <- "C"
i += 3
}
}
}()
go func() {
for i := 3; ; {
if i == 3 {
chA <- "A"
}
select {
case <-chC:
fmt.Println("[C]:", i)
chA <- "A"
i += 3
}
}
}()
for !false {
fmt.Print()
}
}
控制台:
[A]: 1
[B]: 2
[C]: 3
[A]: 4
[B]: 5
[C]: 6
[A]: 7
[B]: 8
[C]: 9
golang 两个协成交替打印1-100的奇数偶数
package main
import(
"fmt"
)
func groutine1(p chan int,e chan bool){
for i:=1;i<=10;i++{
p<-i
if i%2==1{
fmt.Println("groutine1:",i)
}
}
e<-true
close(e)
}
func groutine2(p chan int,e chan bool){
for i:=1;i<=10;i++{
<-p
if i%2==0{
fmt.Println("groutine2:",i)
}
}
e<-true
close(e)
}
func main(){
msg:=make(chan int)
e:=make(chan bool,1)
go groutine1(msg,e)
go groutine2(msg,e)
//time.Sleep(time.Second *1)
for{
_,ok:=<-e
if !ok{
break
}
}
}
package main
import (
"fmt"
"time"
)
var POOL = 100
func groutine1(p chan int) {
for i := 1; i <= POOL; i++ {
p <- i
if i%2 == 1 {
fmt.Println("groutine-1:", i)
}
}
}
func groutine2(p chan int) {
for i := 1; i <= POOL; i++ {
<-p
if i%2 == 0 {
fmt.Println("groutine-2:", i)
}
}
}
func main() {
msg := make(chan int)
go groutine1(msg)
go groutine2(msg)
time.Sleep(time.Second * 1)
}
groutine-1: 1groutine-2: 2groutine-1: 3groutine-2: 4groutine-1: 5groutine-2: 6groutine-1: 7groutine-2: 8
==================================================
//使用select可以解决从管道取数据的阻塞问题
func main(){
//使用select可以解决从管道取数据的阻塞问题
// 1.定义一个管道 10个数据
intChan := make(chan int,10)
for i := 0; i<10;i++ {
intChan <- i
}
// 2.定义一个管道 5个数据string
stringChan := make(chan string, 5)
for i := 0; i < 5; i++ {
stringChan <- "hello" + fmt.Sprintf("%d",i)
}
label :
for {
//注意:这里,如果intChan一直没有关闭,不会一直阻塞而deadlock
//会自动到下一个case匹配
select {
case v := <-intChan :
fmt.Printf("从intChan读取的数据%d\n",v)
case v := <-stringChan :
fmt.Printf("从stringChan读取的数据%s\n",v)
default:
fmt.Printf("都取不到了取的数据\n")
//return
break label
}
}
}
===================================================
===================================================
var intArr3 [5]int
//为了每次生成的随机数不一样,我们需要给一个seed值
rand.Seed(time.Now().UnixNano())
for i := 0; i < len(intArr3); i++ {
intArr3[i] = rand.Intn(100) //0<=n<100
}
fmt.Println("交换前=",intArr3)
//反转打印,交换的次数是 len / 2,
//倒数第一个和第一个元素交换,倒数第二个和第二个元素交换
temp := 0
for i := 0; i < len(intArr3) / 2; i++ {
temp = intArr3[len(intArr3) - 1 - i]
intArr3[len(intArr3) - 1 - i] = intArr3[i]
intArr3[i] = temp
}
fmt.Println('交换后=',intArr3)
=============================
找出不重复最多字符串位数
hello := "abcabbacdaftgsya"
ci := 0
jj := 0
mp := make(map[int32]int32)
for _,v := range hello{
if _,ok := mp[v];!ok {
mp[v]=v
ci++
}else{
mp = make(map[int32]int32)
mp[v]=v
if ci > jj {
jj = ci
}
ci = 1
}
}
return ci
请符合两数之和的索引
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定
nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
暴力破解法
func twoSum(nums []int, target int) []int {
length := len(nums)
for i:=0;i<length;i++{
for j:=i+1;j<length;j++{
if t := nums[i]+nums[j];
t==target{
return []int{i,j}
}
}
}
return []int{}
}