算法:两数之和(暴力解法和优化算法)
2023-12-13 03:49:56
?暴力解法:使用快慢指针解决,时间复杂度?O(n^2),空间复杂度?O(n)
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let slow = 0
let fast = 1
// 如果慢指针没有超过nums边界就继续查找
while(slow <= nums.length-1){
if(nums[slow] + nums[fast] == target){
return [slow,fast]
}else{
// 如果快指针位置的值不符合要求就让快指针向右移动一位
++fast
// 如果快指针已经超过nums的边界就让慢指针向右移动一位
// 同时将快指针移动到慢指针的下一位
if(fast > nums.length-1){
++slow
fast = slow +1
}
}
}
};
? 优化算法:使用map结构解决,时间复杂度?O(n),空间复杂度?O(n)
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let mapIds = new Map()
for (const [index, item] of nums.entries()) {
// 利用map结构不重复的特点,用目标值减去当前值,也就是 9-2=7
// 然后存 2,这样之后找 7 就可以了
if(!mapIds.has(target-item)){
mapIds.set(item,index)
}else{
return [mapIds.get(target-item),index]
}
}
};
文章来源:https://blog.csdn.net/sdhshsjh/article/details/134880893
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!