- 博客(6)
- 收藏
- 关注
原创 Leetcode698.划分为k个相等的子集
题目:解题思路:首先这道题使用的深度优先搜索算法,通过分析题目可知,如果一个数组能分成k个总和相同的子集,那么首先我们要知道数组的总和除以k是否得到一个整数part_sum,这个part_sum就是我们子集的总和,如果除以k得不到一个整数,说明数组不可能划分,直接排除。所以当数组可以划分的情况下,使用深度搜索,从数组的第一个元素开始累加,如果大于目标总和,就递归返回,表示这个数不在对应子集中...
2019-03-03 11:45:09
514
原创 Leetcode932.漂亮数组
题目:解题思路:使用递归的方法。由题目可知,给定一个N,给出符合条件的排列。递归使大问题变成小问题,将N缩小,缩小到可以轻松解决的的大小,所以当N为1时,递归结束,返回1.如何将结果合并呢?我们知道当某个数组排序符合条时,假设该数组为A,那么kA+n也是符合条件的数组,k是A的倍数,也就是说A的线性组合也是符合条件的。根据这个原理可知,N被缩小多少倍,就将得到的子结果扩大多少倍。代码如下:...
2019-03-02 15:26:46
444
原创 Leetcode23.合并K个排序链表
题目:解题思路:这道题使用的是分治算法。首先还用辅助函数mergeTwoLists(…)用来合并两个有序单链表,不申请额外的空间实现原地合并。代码如下: ListNode*mergeTwoLists(ListNode*l1,ListNode*l2){ ListNode*nexthead; ListNode*head; if(l1==NUL...
2019-03-02 13:33:41
140
原创 Leetcode240.搜索二维矩阵
题目:解题思路:将二维数组看做一个矩形,选取矩形的右上角数字,当选取的数字刚好和要查找的数字相等时,结束查找过程。如果选取的数字小于要查找的数字时,那么根据数组排序的规则,要查找的数字应该在所选择的数字的右边或者下边,因为所选择的数字已经是最右边的数字,所以要查找的数字只可能出现在所选择的数字的下边,于是剔除这个数字所在的行。如果所选择的数字大于要查找的数字,要查找的数字只可能出现在该数字的...
2019-03-01 21:15:21
144
原创 Leetcode312.戳气球
题目:解题思路:首先这道题使用的是动态规划方法;根据题目可知,当我们戳破一个气球时,该气球左右的两个气球变成相邻的两份气球,即题目中的nums[left]和nums[right];我们创建一个新的数组,新数组的第一个元素和最后一个元素都是1,代表室不是真实存在且不能被戳破的气球,新数组的其他元素和原数组相同。当我们要求最大获取金币数时,就是在区间为【0,size+1】选择戳气球的方案使得金...
2019-03-01 20:27:02
216
原创 Leetcode53.最大子序和
Leetcode53.最大子序和题目如下:这道题我才用了分治法去做:利用局部最优解求得全局最优解;代码如下:class Solution {public: int maxSubArray(vector<int>& nums) { if(nums.size()==0){ return 0; } ...
2019-02-28 21:08:05
175
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人