最强解析面试题:和为N的三个数字
Posted 魏小言
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最强解析面试题:和为N的三个数字相关的知识,希望对你有一定的参考价值。
文章目录
最强解析面试题:和为N的三个数字
文章讲解 “ 和为N的三个数字 ” 经典面试题,包含思路及源码,及解惑!
题目
和为N的三个数字。
思路
思路同前篇:和为S的两个数字,先固定一个,计算后两个。
- 利用数组的非递减序,进行首尾同时便利,若之和超过给定值,则尾指针递减,反之首指针递增。
- 排序之后可解决三数字集合重复的问题,注意每个数字都要进行判断去重
代码
package main
import (
"fmt"
"sort"
)
func main() {
//var arr = []int{5,7,6,9,11,10,8}
}
func Res() [][]int {
var res [][]int
var intArr = []int{-1, 0, 1, 2, -1, -4}
tar := 0
sort.Ints(intArr)
for k := 0; k < len(intArr); k++ {
if intArr[k] > 0{
break
}
if k > 0 && intArr[k] == intArr[k-1] {
continue
}
i := k + 1
j := len(intArr) - 1
for ; i < j; {
if intArr[i]+intArr[j]+intArr[k] > tar {
j--
}else if intArr[i]+intArr[j]+intArr[k] < tar {
i++
}else{
var tmp = []int{intArr[i], intArr[j], intArr[k]}
res = append(res, tmp)
i++
j--
for {
if i < j && intArr[i] == intArr[i-1] {
i++
}else{
break
}
}
for {
if i < j && intArr[j] == intArr[j+1] {
j--
}else{
break
}
}
}
}
}
return res
}
附录
忙碌
以上是关于最强解析面试题:和为N的三个数字的主要内容,如果未能解决你的问题,请参考以下文章