真难啊,总共a了一道,第二题推出来公式了,但是不知道哪里有问题。3、4大眼瞪小眼不会。
第一题:查询长度为3且相同的字串数量
贴下第一题代码:
用一个dp先遍历整个串,记录以第i位结尾的前i个字符中所有满足条件的个数,每次给定区间,只需要用dp[r-1]-dp[l]即可求得相应区间内满足条件的个数。
第二题:给定数组长度以及元素之和,求某个位置的最大值,限制元素都是正整数且相差不超过1。
过了0%,但是我的思路感觉没啥毛病啊,有大佬的话欢迎指正。
要找位置p的满足条件的最大值,那位置p的值一定是数组中最大的数(或者最大数之一),也就是说位置p的数一定应该从每个位置均分m(m//n)开始遍历到m中的某一个满足某种条件的数,满足什么条件呢?满足位置p(不包含p)前面的数之和(等差数列)+后面的数之和(等差数列)都有个取值范围,前面的数之和取值范围是【left_min,left_max】=【(i-p+1)*(p-1)+(p-1)*(p-2)/2, (p-1)*i】,后面的数取值范围是【right_min,right_max】=【(i-n+p)*(n-p)+(n-p)*(n-p-1)/2,(n-p)*i】,则前面的数+后面的数取值范围是[left_min+right_min,left_max+right_max],设位置p的数为i,则m-i应该在这个区间内,i从m//n遍历到m,如果有m-i在这个区间内则更新结果,最后找到的满足条件的数就是我们需要的结果。
#牛客在线求职答疑中心##网易##我的实习求职记录##互联网没坑了,还能去哪里?##秋招##笔试#