摘要: 今天好菜 阅读全文
posted @ 2020-02-16 12:32 swiftAlien 阅读(77) 评论(0) 推荐(0)
摘要: 1、最长公共子序列 对于两个子序列 S1 和 S2,找出它们最长的公共子序列。 定义一个二维数组 dp 用来存储最长公共子序列的长度,其中 dp[i][j] 表示 S1 的前 i 个字符与 S2 的前 j 个字符最长公共子序列的长度。考虑 S1i 与 S2j 值是否相等,分为两种情况: 当 S1i= 阅读全文
posted @ 2020-02-15 21:17 swiftAlien 阅读(352) 评论(0) 推荐(0)
摘要: 基本思想: 300. 最长上升子序列 M 给定一个无序的整数数组,找到其中最长上升子序列的长度。 通用方法: class Solution { public: int lengthOfLIS(vector<int>& nums) { int n = nums.size(); if (n == 0) 阅读全文
posted @ 2020-02-15 20:25 swiftAlien 阅读(175) 评论(0) 推荐(0)
摘要: 2020-02-15 343. 整数拆分 M(乘积最大化) 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 max函数可以使用initializer_list,用来求多个数的最值; class Solution { public: int i 阅读全文
posted @ 2020-02-15 13:54 swiftAlien 阅读(163) 评论(0) 推荐(0)
摘要: 2020-02-15 303. 区域和检索 - 数组不可变 E 给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。 一维前缀和: class NumArray { public: vector<long long> dp; NumArra 阅读全文
posted @ 2020-02-15 11:35 swiftAlien 阅读(177) 评论(0) 推荐(0)
摘要: 64. 最小路径和 E 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 (最简单的模板题) class Solution { public: int minPathSum(vector<vector<in 阅读全文
posted @ 2020-02-15 10:21 swiftAlien 阅读(193) 评论(0) 推荐(0)
摘要: 2020-02-13 70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 最基本的问题: dp[i] = dp[i-1] + dp[ i - 2] class Solution { public: int climb 阅读全文
posted @ 2020-02-13 14:30 swiftAlien 阅读(341) 评论(0) 推荐(0)
摘要: 81. 搜索旋转排序数组 II 33. 搜索旋转排序数组 代码一样: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 阅读全文
posted @ 2020-02-12 19:10 swiftAlien 阅读(125) 评论(0) 推荐(0)
摘要: 二分问题可以按循环条件总结为两个模板: 循环条件为(left <= right): while(left <= right) { int mid = (right + left) / 2; if(nums[mid] == target) return mid; else if (nums[mid] 阅读全文
posted @ 2020-02-12 11:59 swiftAlien 阅读(219) 评论(0) 推荐(0)
摘要: 最简单: 122. 买卖股票的最佳时机 II (能够买卖无数次) 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 cla 阅读全文
posted @ 2020-02-10 18:41 swiftAlien 阅读(275) 评论(0) 推荐(0)