0-1背包问题、最大连续子数组问题、最长公共子序列、最长公共子串、最小编辑距离、钢条切割、矩阵链乘 动态规划问题的一般步骤: 给出问题的表示,明确子问题 分析最优结构,构造递推公式 确定计算顺序,依次求解问题 记录决策过程,输出最优方案 0-1背包 动规方程: 用$p[i,c]$表示前i个物品在背包 ...
分类:
编程语言 时间:
2020-12-31 12:05:20
阅读次数:
0
Given an array of integers, return the number of (contiguous, non empty) subarrays that have a sum divisible by . Example 1: Note: 1. `1 这道题给了一个数组,让返回 ...
分类:
编程语言 时间:
2020-12-25 11:49:15
阅读次数:
0
题目: 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例: 输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的 ...
分类:
编程语言 时间:
2020-12-05 11:04:03
阅读次数:
9
1、归并排序 要将一个数组排序,可以先(递归地)将它分成2半分别进行排序,然后将结果归并起来。 自顶向下的归并排序:先将数组划分2部分,分别递归调用子数组进行排序,最后将子数组归并为最终的结果。 自底向上的归并排序:将长度为n的数组划分为n个子数组,然后两两归并,每次加倍。 2、快速排序 快速排序是 ...
分类:
编程语言 时间:
2020-11-26 14:19:20
阅读次数:
36
题意:构造一个长度为n的数组,使得每个子数组中所有元素的和能被这个子数组的长度整除 解题思路:显然,构造一个元素全部相同的数组即可满足要求 代码: #include<iostream> #include<algorithm> #include<vector> #include<cstdio> #in ...
分类:
其他好文 时间:
2020-11-21 11:55:12
阅读次数:
6
简单动态规划:dp[i]是以位置i结束的最大和,动态转移方程dp[i] = max(dp[i-1]+array[i], array[i]),dp中的最大值即是结果。 class Solution { public: int FindGreatestSumOfSubArray(vector<int> ...
分类:
编程语言 时间:
2020-11-21 11:46:10
阅读次数:
5
因为子数组是连续的,所以判断连续的子数组的和时,我们往往开一个前缀和数组预处理出所有数的前缀和,这样能够降低求子数组的和的时间复杂度。 这题需要单独处理k为0的情况,由于数组所有元素都是非负数,所以当k为0时,如果存在两个相邻的数的值都为0,则返回true,否则返回false。 使用前缀和判断是否存 ...
分类:
编程语言 时间:
2020-11-19 12:34:32
阅读次数:
7
1.找到最大值减去最小值小于等于一个数值的子数组数量 如果L~R范围上达标,那么里面的任何一个子数组都达标 如果L~R范围上不达标,当R向右扩时,必定不达标。 所有我们只需要遍历一次,每次找到以L开头的子数组达标的子数组数量。 使用滑动窗口,这里用到两个滑动窗口。特别简单,就是保持队列里面的大小顺序 ...
分类:
编程语言 时间:
2020-11-11 16:44:36
阅读次数:
18
int sumOddLengthSubarrays(int* arr, int arrSize){ int i,j,cnt,sum,total=0; for(i=0; i<arrSize; i++) { cnt=0; sum=0; for(j=i; j<arrSize; j++) { cnt++; ...
分类:
编程语言 时间:
2020-11-08 17:21:52
阅读次数:
23
问题描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 解法一(动态规划): 用dp[i]表示第i位结尾 ...
分类:
其他好文 时间:
2020-11-08 17:06:45
阅读次数:
22