实现一个函数,给定一个数组和一个目标值,找出数组中三个数的和等于目标值,并返回这三个数的下标
来源:2-20 找出一个数组中和为 n 的两个数-双指针的代码演示
unbreakable_全栈
2023-07-31
实现一个函数,给定一个数组和一个目标值,找出数组中三个数的和等于目标值,并返回这三个数的下标
变成三个的话 我不会啦 老师讲的是双指针 三个数的话 怎么办呢 我没做出来function targetFn (arr){
arr = arr.sort((a,b) => a - b)
let res =[]
for(let i=0; i<arr.length; i++){
if (arr[i] > 0) break
if (i > 0 && arr[i -1] ===arr[i]) continue
for (let j=i+1;k =arr.length -1;j<k){
const sum =arr[i]+arr[j]+arr[k]
if (sum >0){
k–
} else if (sum < 0) {
j++
} else {
// zhaodao
res.push(arr[i],arr[j],arr[k])
while(j<k && arr[j] === arr[j+1]) j++
while(j<k && arr[k] === arr[k-1]) k–
j++
k–
}
}
}
return res
}
targetFn (arr)
写回答
1回答
-
双越
2023-07-31
三个数当然就不一样了。
双指针对应的就是两个数。如此推导,三个数就得用三指针,那时间复杂度就指数增长了。
可以再继续脑洞一下,找出数组中 10000 个数的和是 n ,那太难了…
022023-08-01
相似问题