算法
文章平均质量分 64
刘大望
软件开发工程师
展开
-
647-回文串
1 暴力解法求出所有的字串 判断每个字串是否是回文#include<bits/stdc++.h>using namespace std;// 判断是否是回文bool ishuiwen(string s){ int index = s.size()/2; int l=0,r=s.size()-1; do { /* code */ if (s[l]!=s[r]) { /* c原创 2020-11-16 10:15:17 · 96 阅读 · 0 评论 -
【leetcode 654】最大二叉树
1,题目描述给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。2,解题思路:遍历数组把找到最大值 maxVal,把根节点 root 做出来,然后对 maxVal 左边的数组和右边的数组进行递归调用,作为 root 的左右子树TreeNode constructMaxim原创 2020-11-15 10:55:40 · 161 阅读 · 0 评论 -
[剑指offer] 二维数组查找
1,题目在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。输入7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]输出true2,暴力解法思路:遍历二维数组class Solution {public: bool Find(int target, vector<v.原创 2020-11-14 19:21:22 · 92 阅读 · 0 评论 -
【算法】打印矩阵
题目描述:转圈打印矩阵【题目】给定一个整型矩阵matrix,请按照转圈的方式打印它。如下图所示;要求:额外的空间复杂度为0(1)原创 2020-06-22 09:32:17 · 1564 阅读 · 0 评论 -
【算法】猫狗队列
题目要求:实现一种狗猫队列的结构,要求如下:用户可以调用add方法将cat类或dog类的实例放入队列中;用户可以调用pollAll方法,将队列中所有的实例按照进队列的先后顺序依次弹出;用户可以调用pollDog方法,将队列中dog类的实例按照进队列的先后顺序依次弹出;用户可以调用pollCat方法,将队列中cat类的实例按照进队列的先后顺序依次弹出;用户可以调用isEmpty方法,检查队列中是否还有dog或cat的实例;用户可以调用isDogEmpty方法,检查队列中是否有dog类的实例;用户可以调用i原创 2020-06-20 08:26:21 · 340 阅读 · 0 评论 -
[leetcode]343. 整数拆分(Integer Break)C++代码实现
1,题目描述2,题目分析将数字分解有三种可能性,dp[j] * dp[i - j],j * dp[i - j],j * (i - j),找到最大的即可①使用dp[i]表示正整数i的最大乘积,则dp[i]=max{dp[i-1]*1,(i-1)*1,dp[i-2]*2,(i-2)*2,...,dp[i-(i-1)]*(i-1),(i-(i-1))*(i-1)};②由①可知,dp...原创 2019-06-20 16:19:36 · 303 阅读 · 0 评论 -
[leetcode]64. 最小路径和(Minimum Path Sum)C++代码实现
1,题目描述2,题目分析f(m,n)表示到达m,n位置所需的最短路径,而到达该位置有两种方法:经过(m-1,n)和经过(m,n-1),因此状态方程可写为:f(m,n)=min(f(m-1,n), f(m,n-1)) + grid[m,n]3,代码实现class Solution {public: int minPathSum(vector<vector...原创 2019-06-16 06:12:15 · 229 阅读 · 0 评论 -
[leetcode]198.打家劫舍(House Robber )C++代码实现
1,题目描述2,题目分析动态规划 dp[i] = max{dp[i-2]+nums[i],dp[i-1]}3,代码实现class Solution {public: int rob(vector<int>& nums) { if(nums.size()==0) return 0; if(...原创 2019-06-10 17:02:33 · 349 阅读 · 0 评论 -
[leetcode]78 子集 (Subsets) C++代码
1,题目描述2,题目分析先从空集开始,加入1变成 [],[1] -> 加入2变成 [] ,[1] ,[2], [1,2], ->加入3变成 [] ,[1] ,[2], [1,2], [3], [1,3], [2,3], [1,2,3]3,代码实现class Solution {public: vector<vector<int&g...原创 2019-06-04 10:46:18 · 138 阅读 · 0 评论 -
[leetcode]1025.除数博弈(Divisor Game)C++代码实现
1,题目描述2,题目分析因为奇数的因子都为奇数,偶数的因子可能是奇数也可能是偶数。所以当N为偶数是时,爱丽丝可以先选一个奇数x,使得N-x结果为奇数,而鲍勃只能选择一个奇数x,使得N-x结果为偶数。最终爱丽丝遇到2时即可获胜。所以N为偶数爱丽丝获胜返回true,N为奇数鲍勃获胜返回false。3,代码实现class Solution {public: boo...原创 2019-06-10 11:02:57 · 389 阅读 · 0 评论 -
[leetcode]题目汇总
[LeetCode] 2.两个数字相加(Add Two Numbers)C++代码实现[leetcode]添加两个数字[leetcode]14.最长公共前缀(Longest Common Prefix)C++代码实现[leetcode]4.寻找两个有序数组的中位数(Median of Two Sorted Arrays)C++代码实现[leetcode]7.整数反转(Revers...原创 2019-06-10 10:48:05 · 287 阅读 · 0 评论 -
[leetcode]977有序数组的平方 (Squares of a Sorted Array) C++代码
1,题目描述2,题目分析1,平方2,排序3,代码实现class Solution {public: vector<int> sortedSquares(vector<int>& A) { int Anums = A.size(); vector<int> ans; for (int i = 0;...原创 2019-06-03 20:53:09 · 170 阅读 · 0 评论 -
[leetcode]413. 等差数列划分(Arithmetic Slices )C++代码实现
1,题目描述2,题目分析开始想到的是如果A[i]到A[j]为一个等差数列,即dp[i][j] = 1,那么如果A[j+1]-A[j]等于该等差数列的差,那么A[i]到A[j+1]也为一个等差数列,但是运行的时候超出内存限制了。3,代码实现/* * @lc app=leetcode.cn id=413 lang=cpp * * [413] 等差数列划分 */cla...原创 2019-06-19 18:05:56 · 308 阅读 · 0 评论 -
[leetcode]338. 比特位计数(Counting Bits)C++代码实现
1,题目描述2,题目分析https://blog.csdn.net/lin453701006/article/details/818660003,代码实现class Solution {public: vector<int> countBits(int num) { vector<int> ret; for...原创 2019-06-14 17:21:45 · 187 阅读 · 0 评论 -
[leetcode]485.最大连续1的个数(Max Consecutive Ones)C++代码实现
1,题目描述2,代码实现int findMaxConsecutiveOnes(vector<int>& nums) { int count=0,res=0; for(int i=0;i<nums.size();++i){ if(nums[i]==1) ++count; else{ ...原创 2019-06-09 12:30:34 · 160 阅读 · 0 评论 -
[leetcode]120. 三角形最小路径和(Triangle )C++代码实现
1,题目描述2,题目分析3,代码实现class Solution {public: int minimumTotal(vector<vector<int>>& triangle) { for (int i = triangle.size() - 2; i >= 0; i--) for (int j =...原创 2019-06-16 22:53:11 · 154 阅读 · 0 评论 -
[leetcode]746. 使用最小花费爬楼梯(Min Cost Climbing Stairs)C++代码实现
1,题目描述2,题目分析动态规划,类似题目:[leetcode]198.打家劫舍(House Robber )C++代码实现3,代码实现class Solution {public: int minCostClimbingStairs(vector<int>& cost) { int costSize = cost.size...原创 2019-06-11 14:30:42 · 178 阅读 · 0 评论 -
[leetcode]416. 分割等和子集(Partition Equal Subset Sum)C++代码实现
1,题目描述2,题目分析https://leetcode-cn.com/problems/partition-equal-subset-sum/comments/3,代码实现class Solution {public: bool canPartition(vector<int>& nums) { int sum=accum...原创 2019-06-28 09:28:04 · 248 阅读 · 0 评论 -
[leetcode]494. 目标和(Target Sum)C++代码实现
1,题目描述2,题目分析动态规划 注意,给定和S,如果S取反,那么结果和当前相同----显然,对于一对相反数,它们的所有方法不过是正负号对换3,代码实现class Solution {public: int findTargetSumWays(vector<int>& nums, int S) { if(nums.empty(...原创 2019-06-28 09:18:38 · 343 阅读 · 0 评论 -
[leetcode]740. 删除与获得点数(Delete and Earn)C++代码实现
1,题目描述2,题目分析遍历原数组,dp保存下标值出现的频数。 dp[i]动态规划,新的dp值在两种情况中选择当前可能的最大值。3,代码实现class Solution {public: int deleteAndEarn(vector<int>& nums) { vector<int> dp(10001, 0)...原创 2019-06-26 21:27:45 · 208 阅读 · 0 评论 -
[leetcode]646. 最长数对链(Coin Change)C++代码实现
1,题目描述2,题目分析3,代码实现class Solution {public: int findLongestChain(vector<vector<int>>& pairs) { sort(pairs.begin(),pairs.end()); vector<int> dp(pairs.s...原创 2019-06-23 17:18:37 · 159 阅读 · 0 评论 -
[leetcode]647. 回文子串(Palindromic Substrings)C++代码实现
1,题目描述2,题目分析套用最长回文字串的遍历方法3,代码实现class Solution {public: int countSubstrings(string s) { if(s.empty()) return 0; vector<vector<bool>...原创 2019-06-18 17:02:46 · 289 阅读 · 2 评论 -
[leetcode]322. 零钱兑换(Coin Change )C++代码实现
1,题目描述2,题目分析3,代码实现class Solution {public: int coinChange(vector<int>& coins, int amount) { int dp[amount+1]; dp[0] = 0; int n = coins.size(); fo...原创 2019-06-22 19:07:29 · 543 阅读 · 0 评论 -
[leetcode]53. 最大子序和(Maximum Subarray)C++代码实现
1,题目描述2,题目分析定义一个函数f(n),以第n个数为结束点的子数列的最大和,存在一个递推关系f(n) = max(f(n-1) + A[n], A[n]); 将这些最大和保存下来后,取最大的那个就是,最大子数组和。因为最大连续子数组 等价于 最大的以n个数为结束点的子数列和3,代码实现class Solution {public: int maxSubA...原创 2019-06-17 21:59:21 · 212 阅读 · 0 评论 -
[leetcode]873. 最长的斐波那契子序列的长度(Length of Longest Fibonacci Subsequence )C++代码实现
1,题目描述2,题目分析DP, dp[i][j]表示以A[i] 和A[j]为结尾的子序列的长度3,代码实现class Solution {public: int lenLongestFibSubseq(vector<int>& A) { int len= A.size(); ...原创 2019-06-25 13:59:50 · 339 阅读 · 0 评论 -
[leetcode]279.完全平方(Perfect Squares)C++代码实现
1,题目描述2,题目分析使用动态规划的思路来做。这种方法和”用最少硬币找零“是相同的3,代码实现class Solution {public: int numSquares(int n) { vector<int> type; for(int i=1;i<=n;++i)//将小于等于n的平方和元素全部添加到typ...原创 2019-06-21 16:19:16 · 333 阅读 · 0 评论 -
[leetcode]718. 最长重复子数组(Maximum Length of Repeated Subarray)C++代码实现
1,题目描述2,题目分析思路分析: 这显然是一道动态规划的题,蛋式可能会有很大一部分的道友做错,会把“子数组”、“子序列”混淆。“子数组”要求连续,“子序列”并不要求连续。所以dp[i][j]应该表示当A[i - 1] == B[j - 1]时,A[0, i -1],B[0, j - 1]连续的重复子数组长度。3,代码实现class Solution {publi...原创 2019-06-25 10:36:49 · 435 阅读 · 0 评论 -
[leetcode]877. 石子游戏(Stone Game)C++代码实现
1,题目描述2,题目分析动态规划3,代码实现class Solution {public: bool stoneGame(vector<int>& piles) { //dp其实就是存储了递归过程中的数值 //dps[i][j]代表从i到j所能获得的最大的绝对分数 //(比如为1就说明亚历克斯从i到j可以...原创 2019-06-13 17:16:07 · 551 阅读 · 0 评论 -
[leetcode]238. 除自身以外数组的乘积 (Product of Array Except Self) C++代码实现
1,题目描述2,题目分析乘积 = 当前数左边的乘积 * 当前数右边的乘积3,代码实现class Solution {public: vector<int> productExceptSelf(vector<int>& nums) { vector<int>result(nums.siz...原创 2019-06-02 12:12:32 · 149 阅读 · 0 评论 -
[leetcode]905.斐波那契数列 (Fibonacci Number) C++代码实现
1,题目描述2,题目分析1,两个索引,一个指向头,一个指向尾2,交换3,代码实现class Solution {public: vector<int> sortArrayByParity(vector<int>& A) { int tailIndex, headIndex; tailInde...原创 2019-06-06 18:07:25 · 249 阅读 · 0 评论 -
[leetcode]4.寻找两个有序数组的中位数(Median of Two Sorted Arrays)C++代码实现
1,题目描述2,代码实现 double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int n = nums1.size(); int m = nums2.size(); if(n > m) //...原创 2019-05-12 20:58:01 · 215 阅读 · 0 评论 -
[leetcode]15.三数之和(3Sum)C++代码实现
1,题目描述2,题目分析参考博客:链接3,代码实现class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> result; if(nu...原创 2019-05-21 21:48:12 · 228 阅读 · 0 评论 -
[leetcode]14.最长公共前缀(Longest Common Prefix)C++代码实现
1,题目描述2,题目分析class Solution {public: string longestCommonPrefix(vector<string>& strs) { if (strs.empty()) return ""; string res = ""; for (int j = 0...原创 2019-05-11 21:38:21 · 178 阅读 · 0 评论 -
[leetcode] 26.删除排序数组中的重复项( Remove Duplicates from Sorted Array )C++代码实现
一,题目描述二,题目分析过程:找与第一个元素不同的元素,找到后放到第一个元素的后面,称为第二个元素,找与第二个元素不同的元素,扎到后放到第二个元素的后面,称为第三个元素。。。。。。。三,代码class Solution {public: int removeDuplicates(vector<int>& nums) { ...原创 2019-05-16 14:31:53 · 89 阅读 · 0 评论 -
[leetcode]148.排序单链表(Sort List)C++代码实现
1,题目描述2,题目分析参考代码:https://blog.csdn.net/yuanliang861/article/details/837556843,代码实现/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ...原创 2019-05-25 11:31:06 · 538 阅读 · 0 评论 -
[leetcode]21.合并两个有序链表(Merge Two Sorted Lists )C++代码实现
1,题目描述2,题目分析和合并两个有序数组思路一样:合并两个有序数组1,比较2,加入剩余的3,代码实现/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x...原创 2019-05-24 16:46:39 · 158 阅读 · 0 评论 -
[leetcode]20.有效的括号(Valid Parentheses )C++代码实现
目录一,题目描述二,题目分析三,代码一,题目描述二,题目分析1,如果为空,true2,如果是奇数个,false3,用到栈结构,如果是左括号,入栈。如果是右括号,判断栈顶是不是相对应的左括号,是->栈顶出栈,不是->false; 最后再判断栈是否为空,空->true,不空->false三,代码class Sol...原创 2019-05-15 19:24:28 · 164 阅读 · 0 评论 -
[leetcode]104.二叉树的最大深度(Maximum Depth of Binary Tree )C++代码实现
1,题目描述2,题目分析主要想到了递归的方法算法描述如下:如果当前节点为空, 返回0(代表此节点下方最大节点数为0)如果当前节点不为空, 返回(其左子树和右子树下方最大节点数中的最大值+1)3,代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; *...原创 2019-05-20 18:41:13 · 149 阅读 · 0 评论 -
[leetcode]添加两个数字
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode...原创 2019-05-10 10:09:31 · 164 阅读 · 0 评论 -
[leetcode]9.回文数(Palindrome Number)C++代码实现
目录一 题目描述二 题目分析三 代码一 题目描述二 题目分析对于任意n位的数字,取n=5,数字95349为例95349 % 10 => 995349 / 10000 => 95349 / 10^4 => 9 可以看出我们可以通过模10来取其最低位,除10^(n-1)来取其最高位,将其最高位和最低位进行比较,便可以得出当前是否符...原创 2019-05-14 18:10:06 · 505 阅读 · 0 评论