
算法
guaiguaitinghua
这个作者很懒,什么都没留下…
展开
-
[leetcode]416.C++实现 分割等和子集(Partition Equal Subset Sum)
1.题目描述 2题目分析 dp[i][j] = dp[i - 1][j] || dp[i - 1][j - nums[i]]; 3.代码实现 class Solution { public: bool canPartition(vector<int>& nums) { bool res = false; int sum = 0; int m = ...原创 2019-06-29 09:23:48 · 365 阅读 · 0 评论 -
[leetcode]343.C++实现 整数拆分(Integer Break)
(一)题目描述 (二)思想方法 将数字拆分成2和3的乘积,因为 2*3 > 1*5; 3*3 > 1*6; 3*2*2 > 1*7; 2*2*2*2 > 1*8 .......所以拆分成2和3后,就能得到最大的乘积。 (三)代码实现 class Solution { public: int integerBreak(int n) { ...原创 2019-06-20 11:21:36 · 467 阅读 · 0 评论 -
977[leetcode]C++实现有序数组的平方(Squares of a Sorted Array)
(一)题目描述 (二)思想方法 先将数组负数取绝对值,再排序,平方。 (三)代码实现 class Solution { public: vector<int> sortedSquares(vector<int>& A) { int i = 0; while (i<A.size()&&A[i] < 0){ ...原创 2019-06-03 21:30:46 · 221 阅读 · 0 评论 -
238[leetcode]C++代码实现除自身以外数组的乘积(product of Array Except Self)
(一) 题目描述 (二)思想方法 每一个数都等于左边数的乘积*右边数的乘积。第一个数等于1*右边数的乘积,最后一个数等于 左边数的乘积*1。 (三)代码实现 class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { vector<...原创 2019-06-03 21:10:04 · 230 阅读 · 0 评论 -
[leetcode]413.C++实现 等差数列划分(Arithmetic Slices)
(一)题目描述 (二)思想方法 题目理解: (1)输入数组不一定是等差数组 (2)P+1<Q,说明数组至少包含三个元素, (3)等差子数组按原数组顺序 方法: {1,2,3} {1,2,3} ...原创 2019-06-19 17:41:19 · 508 阅读 · 0 评论 -
[leetcode]647.C++实现 回文子串(Palindromic Substrings)
(一)题目描述 (二)思想方法 (三)代码实现 class Solution { public: int countSubstrings(string s) { int res = 0; int n = s.length(); for( int i = 0 ; i < n ; i ++ ){ ...原创 2019-06-18 20:04:09 · 438 阅读 · 0 评论 -
877.[leetcode]C++实现石子游戏(Stone Game)
(一)题目描述 (二)思想方法 动态规划: dp[i][j]=max(piles[i]-dp[i+1][j],piles[j]-dp[i][j-1]) dp[ i ][ j ] 表示从 i ~ j 中取二人的差;两重循环是从小到大的构造;d是子数组的长度 (三)代码实现 class Solution { public: bool stoneGame(vector<...原创 2019-06-13 16:34:47 · 789 阅读 · 0 评论 -
292.[leetcode]Nim 游戏(Nim Game)
(一)题目描述 (二)思想方法 为4的倍数时,永远不会赢得比赛。 (三)代码实现 class Solution { public: bool canWinNim(int n) { if (n % 4 == 0) { return false; } return true; } }; ...原创 2019-06-01 20:51:36 · 158 阅读 · 0 评论 -
561.[leetcode]C++实现数组拆分1(Array Partition I)
(一)题目描述 (二)思想方法 让相近的数在一起取最小值,才能使最终的和最大。 (三)代码实现 class Solution { public: int arrayPairSum(vector<int>& nums) { int sum = 0; sort(nums.begin(), nums.end()); for (int i...原创 2019-06-06 20:14:38 · 843 阅读 · 0 评论 -
905.[leetcode]C++实现按奇偶排序数组(Sort Array By Parity)
(一)题目描述 (二)思想方法 设置两个指针,一个指向数组起始位置low=0;一个指向数组末尾high=A的大小减一。若数组low位置的数是偶数则low++,直到遇到奇数,high类似,若high的位置为奇数,则high--,直到遇到偶数,若此时low<high,则他俩交换。直到low不小于high。 (三)代码实现 class Solution { public: ...原创 2019-06-06 20:03:01 · 622 阅读 · 0 评论 -
509.[leetcode]C++实现斐波纳契数(Fibonacci Number)
(一)题目描述 (二)思想方法 1.首先想到的是迭代法,f(n)=f(n-1)+f(n-2)但是有重复计算. 2.for循环记录上一次的f(n-2) (三)代码实现 //第一种 int Solution::fib(int N) { if (N == 0) return 0; if (N == 1) return 1; else { return fib(N - 1...原创 2019-06-06 19:17:29 · 233 阅读 · 0 评论 -
120.[leetcode]C++实现三角形最小路径和(Triangle)
(一)题目描述 (二)思想方法 https://blog.youkuaiyun.com/qq874455953/article/details/82806030 (三)代码实现 class Solution { public: int minimumTotal(vector<vector<int>>& triangle) { vect...转载 2019-06-16 09:05:42 · 286 阅读 · 0 评论 -
[leetcode]64.C++实现最小路径和(Minimum Path Sum)
(一)题目描述 (二)思想方法 动态规划: 从原点到达(i, j)的最小路径等于 :原点到达(i-1, j)最小路径与到达(i, j-1)最小路径中的最小值。 dp[i]=grid[i][j]+min{dp[i-1],dp[i]}; (三)代码实现 class Solution { public: int minPathSum(vector<vector<...原创 2019-06-16 09:13:25 · 265 阅读 · 0 评论 -
78[leetcode]求数组子集(Subsets)
(一)题目描述 (二)思想方法 遍历数组,一个一个的添加,每一次循环在以前基础上添加本次循环的数,以此类推。比如对于题目中给的例子 [1,2,3] 来说,最开始是空集,那么我们现在要处理1,就在空集上加1,为 [1],现在我们有两个自己 [] 和 [1],下面我们来处理2,我们在之前的子集基础上,每个都加个2,可以分别得到 [2],[1, 2],那么现在所有的子集合为 [], [1]...原创 2019-06-04 21:02:03 · 258 阅读 · 0 评论 -
[leetcode]718.C++实现 最长重复子数组(Maximum Length of Repeated Subarray)
(一)题目分析 (二)思想方法 动态规划: if(A[i-1]==B[j-1]) Dp[i][j] = Dp[i-1][j-1]+1; else Dp[i][j] = 0 (三)代码实现 class Solution { public: int findLength(vector<int>& A, vector<...原创 2019-06-24 09:28:48 · 193 阅读 · 0 评论 -
[leetcode]494.C++实现 目标和(Target Sum)
(一)题目描述 (二)思想方法 于是我们可以知道:target = sum(P) - sum(N); 那么sum(P) + sum(N) + sum(P) - sum(N) = sum(S) + target = 2sum(P); 那么sum(P) = [target + sum(S)] / 2; (三)代码实现 class Solution { public: ...原创 2019-06-27 09:14:49 · 380 阅读 · 0 评论 -
[leetcode]740.C++实现 删除获得点(Delete and Earm)
(一)题目描述 (二)思想方法 dp[i] 表示轮到i时,现有的point ;num表示值为i的总和 对于值为i的元素,要么抛弃它,要么选择它 选择它以为着抛弃数i-1和i+1, dp[i] = 所有i的和 + dp[i+2] 而抛弃它意味着dp[i] = dp[i+1] (三)代码实现 class Solution { public: int deleteAndE...原创 2019-06-27 09:08:11 · 211 阅读 · 0 评论 -
[leetcode]873.C++实现 最长的斐波那契子序列的长度(Length of Longest Fibonacci Subsequence)
(一)题目描述 (二)思想方法 动态规划:dp[j][i]=max(dp[j][i],dp[it->second][j]+1); 斐波那契式的: n >= 3 对于所有i + 2 <= n,都有X_i + X_{i+1} = X_{i+2} (三)代码实现 #include <set> class Solution { public...原创 2019-06-27 08:58:22 · 346 阅读 · 0 评论 -
[leetcode]646.C++实现 最长数对链(Maximum Length of Pair Chain )
(一)题目描述 (二)思想方法 如果前面链对的末元素小于后链对的首元素,那么这两个链对就可以链起来,问最大能链多少个? 首先把这些链对按照每个链对的末元素大小来进行排列。然后把排列后的第一个链对作为当前链对队列尾,遍历链对,找到第一个符合首元素大于位于当前队列尾的链对末元素的链对,然后更新当前链对队列尾以及队列链对个数。 (三)代码实现 class Solution { pu...原创 2019-06-24 09:10:36 · 250 阅读 · 0 评论 -
[leetcode]322.C++实现 零钱兑换(Coin Change)
(一)题目描述 (二)思想方法 动态规划: coins = [1,2,5],amount = 11 则所需硬币数ans[11] = min(ans[11-1], ans[11-2], ans[11-5]); (三)代码实现 class Solution { public: int coinChange(vector<int>& coins, int...原创 2019-06-22 19:05:15 · 937 阅读 · 0 评论 -
[leetcode]279.C++实现 完全平方(Perfect Squares)
(一)题目描述 (二)思想方法 利用动态规划思想解题,初始化dp数组令小于n的完全平方数为1,从1到n遍历求解最小组成个数,再对每个数遍历小于其的所有完全平方数,最小组成个数的状态转移方程为: dp[i] = min(dp[i], dp[i - j * j] + 1) (三)代码实现 class Solution { public: int numSquares(int...原创 2019-06-22 19:05:43 · 508 阅读 · 0 评论 -
[leetcode]53.C++实现 最大子序和(Maximum Subarray)
(一)题目描述 (二)思想方法 动态规划: dp[i] = max{num[i],dp[i-1] + num[i]} (三)代码实现 class Solution { public: int maxSubArray(vector<int>& nums) { int l = nums.size(); i...原创 2019-06-18 14:35:08 · 172 阅读 · 0 评论 -
746.[leetcode] C++实现爬楼梯最小花费(Min Cost Climbing Stairs)
(一)题目描述 (二)思想方法 动态规划,如果你想爬上第i个台阶,你只能从第i-1,或者i-2爬上来,所以 dp[i]=min{dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]} (三)代码实现 class Solution { public: int minCostClimbingStairs(vector<int>&...原创 2019-06-11 16:22:53 · 349 阅读 · 0 评论 -
[leetcode]338.C++实现 比特位计数(Counting Bits)
(一)题目描述 (二)思想方法 (1): 0 1 1 0 1 1 2 1 0 1 12 1 2 2 3 1 每遇到一个2的次幂,就从之前的数组中下标为1的开始加1。 (2): 动态规划 (三)代码实现 class Solution { public: vector<int> countBits(int num) { ...原创 2019-06-17 09:53:15 · 445 阅读 · 0 评论 -
217.[leetcode] 存在重复元素(Contains Duplicate)
(一)题目描述 (二)思想方法 先对数组排序,如果前一个和后一个相同则有重复元素。 (三)算法实现 class Solution { public: bool containsDuplicate(vector<int>& nums) { if (nums.size() < 2) { return false; }...原创 2019-05-31 20:54:54 · 127 阅读 · 0 评论 -
121.[leetcode]C++实现买卖股票最佳时机(Best Time to Buy and Sell Stock)
(一)题目描述 (二)思想方法 遍历数组,如果有小的就从后面找大的减去。 (三)代码实现 class Solution { public: int maxProfit(vector<int>& prices) { int pricesSize=prices.size(); if(pricesSize<=0) ...原创 2019-06-12 17:08:25 · 151 阅读 · 0 评论 -
[leetcode]
目录 1,题目描述 2,题目分析 3,代码实现 1,题目描述 2,题目分析 参考博客:链接 3,代码实现 class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<i...原创 2019-05-21 22:03:07 · 121 阅读 · 0 评论 -
longestCommonPrefix最长公共前缀
//Longest Common Prefix string Solution::longestCommonPrefix(vector<string>& strs) { string reStr = ""; if (!strs.empty()) { int strs0Len = strs[0].size(); int strsLen = strs.size...原创 2019-05-11 21:40:22 · 175 阅读 · 0 评论 -
[leetcode]Merge Two Sorted Lists合并两个有序链表2
1,题目描述 2,代码实现 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { ...原创 2019-05-25 07:33:19 · 121 阅读 · 0 评论 -
[leetcode]Merge Two Sorted Lists合并两个有序链表
目录 1,题目描述 2,代码实现 1,题目描述 中文 2,代码实现 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }...原创 2019-05-25 07:20:14 · 121 阅读 · 0 评论 -
【leetcode】Valid Parentheses
bool isValid(string s) { if (s.empty()) { return true; } if (s.length() % 2 != 0) { return false; } stack<char> operatorStack; for (int i = 0; i < s....原创 2019-05-16 08:52:49 · 114 阅读 · 0 评论 -
[leetcode] Maxinum Depth of Binary Tree 二叉树最大深度
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *...原创 2019-05-20 21:20:29 · 147 阅读 · 0 评论 -
[leetcode] Add Two Numbers
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListN...原创 2019-05-10 15:53:03 · 100 阅读 · 0 评论 -
【leetcode】水容器
int maxArea(vector<int>& height) { int res = 0, i = 0, j = height.size() - 1; while (i < j) { res = max(res, min(height[i], height[j]) * (j - i)); ...原创 2019-05-20 09:02:52 · 176 阅读 · 0 评论 -
[leetcode]Palindrome Number 回文数
if (x<0){ return false; } stringstream in; in << x; string s1 = in.str(); int low = 0,high= s1.length()-1; while (low <= high) { if (s1[low] != s1[high]) { retur...原创 2019-05-14 20:54:04 · 120 阅读 · 0 评论 -
[leetcode]合并数组
void Solution::merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { vector<int> num; int i = 0, j = 0; while (j<n && i<m) { if (nums1...原创 2019-05-18 22:06:37 · 217 阅读 · 0 评论 -
[leetcode] Median of Two Sorted Arrays 求两个数组的中位数
double Solution::findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int m = nums1.size(), n = nums2.size(); if (m < n) return findMedianSortedArrays(nums2...转载 2019-05-12 20:55:41 · 103 阅读 · 0 评论 -
[leetcode]链表排序
(一)题目描述 (二)思想方法: 关于排序的方法有很多,但是符合O(nlogn)并适合链表的只有合并排序。 归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conque...原创 2019-05-25 21:52:42 · 4572 阅读 · 2 评论 -
[leetcode]Remove Duplicates from Sorted Array删除数组中重复的元素
int removeDuplicates(vector<int>& nums) { if (nums.size() == 0){ return 0; } int i = 0, j = i + 1; int temp = 0; while (j < nums.size()) { if (nums[i] == nums[j]) {...原创 2019-05-17 08:19:20 · 199 阅读 · 1 评论 -
1051[leetcode]C++实现Height Checker
(一)题目描述 (二)思想方法 先复制数组再排序,最后找不同。 (三)代码实现 class Solution { public: int heightChecker(vector<int>& heights) { vector<int> temp=heights; sort(heights.begin(), heights.e...原创 2019-06-05 20:23:36 · 175 阅读 · 0 评论