随笔分类 -  leetcode-medium

摘要:输入一个数组,字典序输出所有组合。 这和输入一个数组,求元素和等于target的所有组合不同,这题是求全排列,每个元素都要选到,而元素和是选择任意的元素,有些元素可能不选 选择用:dfs+回溯(思路是深搜每个元素,选择,直到树的底部,如果满足条件放入结果,返回,回溯) 排列用:递归+交换(思路是对n 阅读全文
posted @ 2016-08-30 15:22 0_summer 阅读(607) 评论(0) 推荐(0)
摘要:输入一个数组,选择任意个数的元素,求和等于target的所有组合,每个元素只能选择一次,组合不能重复 求组合:先排序,dfs,回溯 去重:把dfs想象成一颗树,同一层如果元素值相同,那么只对第一个元素深搜,其余相同的元素不必深搜,注意是同一层,看代码注释 阅读全文
posted @ 2016-08-30 12:49 0_summer 阅读(97) 评论(0) 推荐(0)
摘要:输入一个数组和target,选择任意个数的元素,求和为target的组合,每个元素可以选择多次 dfs,回溯,因为每个元素可以选择多次,所以向下搜索的时候从当前元素开始 同类题:http://blog.csdn.net/AC_0_summer/article/details/48293581 阅读全文
posted @ 2016-08-30 12:21 0_summer 阅读(105) 评论(0) 推荐(0)
摘要:输入递增序列和target,如果target存在返回它在序列中的位置,否则返回将它插入序列的位置 二分 阅读全文
posted @ 2016-08-30 11:16 0_summer 阅读(134) 评论(0) 推荐(0)
摘要:输入一个递增序列和一个target,找出序列中target的上界和下界 二分,实现lower_bound和upper_bound,要注意的是没有找到target的情况的判断:low==high,或者nums[high-1]!=target(high初始设为nums.size()) 阅读全文
posted @ 2016-08-30 11:11 0_summer 阅读(87) 评论(0) 推荐(0)
摘要:输入一个序列,求字典序更大的下一个序列 可以直接调用next_permutation(),一行搞定 非要写出实现细节的话,就是从后往前遍历,找到递减序列的前一个元素设为x,如果整个序列是递减的,直接reverse,否则将x与递减序列的第一个大于它的数交换,然后reverse递减序列。寻找递减序列中第 阅读全文
posted @ 2016-08-30 10:55 0_summer 阅读(144) 评论(0) 推荐(0)
摘要:输入n,输出n个括号的组合。 如果仅仅求组合有多少种,直接用卡特兰公式,但要求输出所有组合,用dfs,回溯,条件是: 设ll和rr为剩下的左括号和右括号数 1.ll>0,可输出左括号 2.ll>=rr,说明不合法,return 3.输出右括号 原因是先出现了左括号才能出现右括号 阅读全文
posted @ 2016-08-30 09:54 0_summer 阅读(90) 评论(0) 推荐(0)
摘要:输入数组,任选四个数字求和,输出所有和等于target的组合,组合不能重复。 还是先排序在用头尾指针,时间降到O^3。注意跳过相同的元素就能实现去重 阅读全文
posted @ 2016-08-30 09:25 0_summer 阅读(105) 评论(0) 推荐(0)
摘要:输入一个数组,任选三个数求和,和为0的所有组合,不能重复,即,-1,0,1这样的三元组只能出现一次。 解法:类似两个数求和的方法,先排序,然后首尾指针法,但这里要求三个数,所以还是得遍历一遍,因此第一个数遍历,剩下两个数用首尾指针法,ON^2 对于重复三元组的处理:本来想把所有结果先放入set<no 阅读全文
posted @ 2016-08-30 00:49 0_summer 阅读(136) 评论(0) 推荐(0)
摘要:输入一组数字,任选三个数字,求这三个数字加起来最接近某一值的和。 枚举三个数字的话ON^3 更高效的方法,利用了求一组数字中两个数字的和的方法,即用两个指针指向首尾往中间移动,前提是数组有序,所以先排序。遍历数组,然后用两个指针指向这个元素后面序列的首尾,如果这三个数字的和到target的距离比之前 阅读全文
posted @ 2016-08-29 23:53 0_summer 阅读(116) 评论(0) 推荐(0)
摘要:输入一组数字,根据手机九宫格上每个数字对应的字母,输出这组数字能代表的所有字母的组合。 dfs,回溯。 阅读全文
posted @ 2016-08-29 22:13 0_summer 阅读(126) 评论(0) 推荐(0)
摘要:输入一个数组,数组中的值代表在数轴的i位置有一个高位height[i]的板子,求两个板子间盛水的最大值。 用两个指针,指向头尾,计算面积,然后移动矮的那个指针,ON 阅读全文
posted @ 2016-08-29 21:36 0_summer 阅读(130) 评论(0) 推荐(0)