算法
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 · 349 阅读 · 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 · 449 阅读 · 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 · 201 阅读 · 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 · 225 阅读 · 0 评论 -
[leetcode]413.C++实现 等差数列划分(Arithmetic Slices)
(一)题目描述(二)思想方法题目理解:(1)输入数组不一定是等差数组(2)P+1<Q,说明数组至少包含三个元素,(3)等差子数组按原数组顺序方法:{1,2,3} {1,2,3} ...原创 2019-06-19 17:41:19 · 489 阅读 · 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 · 416 阅读 · 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 · 758 阅读 · 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 · 146 阅读 · 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 · 821 阅读 · 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 · 606 阅读 · 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 · 218 阅读 · 0 评论 -
120.[leetcode]C++实现三角形最小路径和(Triangle)
(一)题目描述(二)思想方法https://blog.csdn.net/qq874455953/article/details/82806030(三)代码实现class Solution {public: int minimumTotal(vector<vector<int>>& triangle) { vect...转载 2019-06-16 09:05:42 · 270 阅读 · 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 · 251 阅读 · 0 评论 -
78[leetcode]求数组子集(Subsets)
(一)题目描述(二)思想方法遍历数组,一个一个的添加,每一次循环在以前基础上添加本次循环的数,以此类推。比如对于题目中给的例子 [1,2,3] 来说,最开始是空集,那么我们现在要处理1,就在空集上加1,为 [1],现在我们有两个自己 [] 和 [1],下面我们来处理2,我们在之前的子集基础上,每个都加个2,可以分别得到 [2],[1, 2],那么现在所有的子集合为 [], [1]...原创 2019-06-04 21:02:03 · 248 阅读 · 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 · 180 阅读 · 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 · 362 阅读 · 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 · 202 阅读 · 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 · 333 阅读 · 0 评论 -
[leetcode]646.C++实现 最长数对链(Maximum Length of Pair Chain )
(一)题目描述(二)思想方法如果前面链对的末元素小于后链对的首元素,那么这两个链对就可以链起来,问最大能链多少个?首先把这些链对按照每个链对的末元素大小来进行排列。然后把排列后的第一个链对作为当前链对队列尾,遍历链对,找到第一个符合首元素大于位于当前队列尾的链对末元素的链对,然后更新当前链对队列尾以及队列链对个数。(三)代码实现class Solution {pu...原创 2019-06-24 09:10:36 · 240 阅读 · 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 · 926 阅读 · 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 · 491 阅读 · 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 · 156 阅读 · 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 · 330 阅读 · 0 评论 -
[leetcode]338.C++实现 比特位计数(Counting Bits)
(一)题目描述(二)思想方法(1):0 1 10 1 1 2 10 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 · 426 阅读 · 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 · 118 阅读 · 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 · 143 阅读 · 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 · 112 阅读 · 0 评论 -
longestCommonPrefix最长公共前缀
//Longest Common Prefixstring 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 · 168 阅读 · 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 · 115 阅读 · 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 · 116 阅读 · 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 · 99 阅读 · 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 · 129 阅读 · 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 · 94 阅读 · 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 · 166 阅读 · 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 · 111 阅读 · 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 · 202 阅读 · 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 · 94 阅读 · 0 评论 -
[leetcode]链表排序
(一)题目描述(二)思想方法:关于排序的方法有很多,但是符合O(nlogn)并适合链表的只有合并排序。归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conque...原创 2019-05-25 21:52:42 · 4553 阅读 · 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 · 184 阅读 · 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 · 166 阅读 · 0 评论