博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ksum问题 (leetcode)
阅读量:3734 次
发布时间:2019-05-22

本文共 750 字,大约阅读时间需要 2 分钟。

1,15,16,18

转载自:
方法一:暴力搜索法 时间复杂度O(n^k)
方法二:排序
2sum:采用快速排序法,排序后采用前后指针。当和为target,则找到答案返回;当和大于target,时,右指针左移;当和小于target时,左指针右移。循环上述过程,若找到则返回,否则直至left=right说明没有解。最后在原数组中找到符合要求的两个数的位置即可。
时间复杂度为O(nlogn)
3sum:采用快速排序法只排一次,每次取一个数x,问题转化为target-x的2sum问题,前后指针法时间复杂度为O(n)
时间复杂度为O(n^2)
4sum:采用快速排序法只排一次,每次取一个数x,问题转化为target-x的3sum问题
时间复杂度为O(n^3)
……
ksum:时间复杂度为O(n^(k-1))
优化:ksum每次取一个数x,只需要对x后的数进行target-x的(k-1)sum问题
除重问题:可以利用set的性质
方法三:哈希 字典{元素:索引}
2sum:如果target-元素在哈希表则返回,不在则将元素添加至哈希表
时间复杂度为O(n)
3sum:每次取一个数x,问题转化为target-x的2sum问题
时间复杂度为O(n^2)
4sum:每次取一个数x,问题转化为target-x的3sum问题
时间复杂度为O(n^3)
除重问题:无论重复元素有多少个,字典中只存放一个的索引
此时哈希表的优势就体现出来,我们可以遍历所有可能的pair,把所有的pair存在dict中,key=a+b, value是一个list,每个元素为(a, b)。时间复杂度为O(n^2)。
但是,我们不可以直接利用pair当作2sum问题,因为这样会有重复的,需要将查找到的two pairs去重

你可能感兴趣的文章
JavaScript之控制语句与JS运算符之void
查看>>
JavaScript包括三块:ECMAScript、DOM、BOM
查看>>
DOM编程案例——innerHTML innerText操作div和span、去除字符串的前后空白trim
查看>>
JavaScript的正则表达式(Regular Expression)
查看>>
共享资源文件
查看>>
BootStrap的响应式布局
查看>>
BootStrap的全局CSS样式(按钮、图片、表格、表单)
查看>>
BootStrap组件:导航条和分页条和插件: 轮播图
查看>>
jQuery的概念与核心函数$的理解
查看>>
jQuery 对象和 dom 对象
查看>>
jQuery 选择器——基本选择器
查看>>
jQuery 选择器——层级选择器
查看>>
jQuery 选择器——过滤选择器
查看>>
Vue-cli安装及使用
查看>>
jQuery选择器——jQuery 元素筛选
查看>>
jQuery 的属性操作
查看>>
jQuery中DOM 的增删改
查看>>
jQuery中CSS 样式操作
查看>>
jQuery 动画
查看>>
jQuery 事件操作
查看>>