
algorithm
胜天半子_王二_王半仙
胜天半子——王二——王半仙儿是也
展开
-
剑指 Offer 42. 连续子数组的最大和
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 提示:1 <= arr.length <= 10^5-100 <= arr[i] <= 100思路:用动态规划,找出最优解的结构:设dp[i]为以下标i为结尾的子数组的最大值∴dp[i] = max原创 2020-08-09 20:03:45 · 126 阅读 · 0 评论 -
leetcode 198
这是一道动态规划的简单题目,只要找出dp方程即可,如下:dp[n] = max( dp[n-1] , dp[n-2]+array[n] )dp[0] = array[0] , dp[1] = max( array[0] , array[1] )代码如下:class Solution {public: int rob(std::vector<int>& nums...原创 2019-10-14 17:04:58 · 119 阅读 · 0 评论 -
leetcode 121买股票的最佳时机
题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。...原创 2019-10-14 15:27:35 · 131 阅读 · 0 评论 -
leetcode 70爬楼梯
这一道题关键是推导出来最佳子机构,可以这样理解:因为每一次只能迈出一步或者两步那么我们设f(n)为n阶楼梯的走法,那么这个f(n)可以分为两部分,一部分是第一步迈出的是一节,另一部分是第一步迈出的是两节,那么就会得出公式f(n) = f(n-1) + f(n-2)然后f(1) = 1;f(2) =2 ;即可得到结果,用递归或者其他什么方法,随便你,下面是我的代码:class Solu...原创 2019-10-14 14:54:06 · 109 阅读 · 0 评论 -
leetcode 55.跳跃游戏
leetcode 55.跳跃游戏题目描述:给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出...原创 2019-09-24 11:32:37 · 236 阅读 · 0 评论 -
leetcode 122 买卖股票的最佳时机 II
贪心算法 以及 leetcode 122 买卖股票的最佳时机 II什么是贪心算法?贪心选择贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。贪心选择是采用从顶向下、以迭代的方法做出相继选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题。对于一个具体问题,要确定它是否具有贪心选择的性...原创 2019-09-24 10:13:38 · 130 阅读 · 0 评论 -
leetcode 96. 不同的二叉搜索树
leetcode 96. 不同的二叉搜索树题目描述:给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1...原创 2019-09-23 16:45:58 · 199 阅读 · 0 评论 -
leetcode 279,完全平方数
leetcode 279,完全平方数题目描述给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9方法一:动态规划构造最优子结构for...原创 2019-09-21 19:44:33 · 151 阅读 · 0 评论 -
选择排序和插入排序通俗理解
选择排序第一次,扫描整个数组,将最小的和第一个交换位置第二次,扫描除第一个之外的剩余数组,找到最小的,和剩余数组的第一位(整个数组的第二个)交换位置第三次,扫描除第一第二之外的…插入排序从第二个开始,它之前的部分进行比较,如果大于本数字,则该数字向后移动一位,否则,向后移动一位,再把本数字放到此位置上。再从第三个,与之前部分比较直到最后一个也比较完毕...原创 2019-09-18 09:44:33 · 195 阅读 · 0 评论 -
归并排序
归并排序,分治法import java.util.Arrays;public class Main_05 { public static final int MAX = 10000; /** * 分归并排序,分治法 * @author 1016795105@qq.com * @param args */ public sta...原创 2019-09-18 09:29:48 · 146 阅读 · 1 评论 -
leeCode-53 最大子序列之和
暴力解法,O(n^3)i代表开始j代表结束k代表从i到j计算这段序列的和,再和最大值比较暴力解法优化:O(n^2)i代表开始j代表结束,j在循环的时候就每次都加上,就像下面这样(写一个大概的意思)int [] a = new int[]{1,2,3,4,5,6,7};for(int i = 0 ; i < a.length ; i++){ int sum = 0; for...原创 2019-09-06 16:24:13 · 158 阅读 · 0 评论 -
LeetCode-5 最大回文序列
思路遍历字符串,每遇到一个字符,以该字符为中心,向两边开始遍历,看看该字符的左右两边是否相等如果相等,就继续扩展如果不相等,就判断当前左右两边包括的字符串是否是最大的如果不明白,一张图保证你明白:如果图没看太懂,下面上代码:class Solution { private int start = 0; private int maxLen = 0; ...原创 2019-09-06 15:21:41 · 204 阅读 · 0 评论