给定一个数组arr,和一个整数k你可以随意删除arr中的数字,最多删除k个目的是让连续出现一种数字的长度尽量长返回这个尽量长的长度比如数组arr = {3,-2,3,3,5,6,3,-2}, k = 3你可以删掉-2、5、6(最多3个),这样数组arr = {3,3,3,3,-2}可以看到连续出现3的长度为4这是所有删除方法里的最长结果,所以返回41 <= arr长度 <= 3 * 10^5-10^9 <= arr中的数值 <= 10^90 <= k <= 3 * 10^5思路:遍历数组arr,以当前位置i为结尾的子数组,删除不超出k个数,组成的最大长度的连续子数组,所有这些子数组中的最大长度即为答案。每个arr[i]维护一个由下标组成的窗口,窗口内的值就是以arr[i]为结尾,删除不超过k个数后的子数组中,所有等于arr[i]的数的下标. 窗口的长度即是当前位置为结尾的子数组删除不超过k个数后,组成的最大长度的连续子数组。以下代码由c++实现。代码:int longest(vector<int> &arr, int k) {
给定一个数组arr,其中可能有正、有负、有0,给定一个整数target,返回arr中所有子数组里,累加和等于target的子数组长度最大是多少?思路:最简单直观的思路就是暴力,两个for循环,枚举所有子数组,看和是否等于target,如果等于就记下长度,找出最长就可以了。这样的时间复杂度是O(n^2)。使用前缀和的方法可以使时间复杂度到O(n)。做法是遍历数组,走到下标 i ,计算从0到 i 的和sum,并且记住这个和sum和i,同时看记忆中是否有 sum-target 的记录,如果有记录并且记录的下标为i',则代表找到一个子数组[i',i]满足和等于target。代码:int maxLength(vector<int> &arr, int target) { if (arr.size() == 0) { return 0; } unordered_map<int, int> map; map.insert({0,-1}); int sum = 0; int ans = 0; for
给定一个由 0 和 1 组成的数组 arr ,将数组分成 3 个非空的部分 ,使得所有这些部分表示相同的二进制值。如果可以做到,请返回任何 [i, j],其中 i+1 < j,这样一来:arr[0], arr[1], ..., arr[i] 为第一部分;arr[i + 1], arr[i + 2], ..., arr[j - 1] 为第二部分;arr[j], arr[j + 1], ..., arr[arr.length - 1] 为第三部分。这三个部分所表示的二进制值相等。如果无法做到,就返回 [-1, -1]。注意,在考虑每个部分所表示的二进制时,应当将其看作一个整体。例如,[1,1,0] 表示十进制中的 6,而不会是 3。此外,前导零也是被允许的,所以 [0,1,1] 和 [1,1] 表示相同的值。示例 1:输入:arr = [1,0,1,0,1]输出:[0,3]示例 2:输入:arr = [1,1,0,1,1]输出:[-1,-1]示例 3:输入:arr = [1,1,0,0,1]输出:[0,2]本题是leetcode原题思路:分成三段后,是什么样子的?三部分中,每个部分
上一次写文章是18号,今天31号,眨眼过去13天了。坚持一件事真的很难。曾国藩写日记一写就是30年是怎么做到的呢?特别是艰难的时候,压力大,自顾不暇的时候。是怎么坚持一件事的呢?曾公的理想是做圣人,而写日记又是圣人之基。所以坚持每天写日记。逻辑上很通顺,实践上很不通顺。
今天给网站添加备案信息,在网上搜了一篇文章。具体操作如下:1、进入后台,找到控制台-外观2、点击编辑当前外观3、在右边点击footer.php4、添加如下代码<div class="blog-text-center"><a href="https://beian.miit.gov.cn/" target="_blank" rel="nofollow"><?php $this->options->bei(); ?></a></div>5、保存6、找到function.php,在themeConfig方法的第一行添加如下代码$bei = new Typecho_Widget_Helper_Form_Element_Text('bei', NULL, NULL, _t('工信部备案号'), _t('留空则不显示')); $form->addInput($bei->addRule('xssCheck', _t('工信部备案号不能使用