当前位置: 首页 > news >正文

简洁大方网站模板百度推广客户端登录

简洁大方网站模板,百度推广客户端登录,宣传册设计及网站建设,网站seo外包目录 有序三元组中的最大值 I有序三元组中的最大值 II无限数组的最短子数组 有序三元组中的最大值 I 给你一个下标从 0 开始的整数数组nums。 请你从所有满足 i < j < k 的下标三元组 (i, j, k) 中&#xff0c;找出并返回下标三元组的最大值。如果所有满足条件的三元组的…

目录

  • 有序三元组中的最大值 I
  • 有序三元组中的最大值 II
  • 无限数组的最短子数组

有序三元组中的最大值 I

给你一个下标从 0 开始的整数数组nums。
请你从所有满足 i < j < k 的下标三元组 (i, j, k) 中,找出并返回下标三元组的最大值。如果所有满足条件的三元组的值都是负数,则返回 0 。
下标三元组 (i, j, k) 的值等于 (nums[i] - nums[j]) * nums[k] 。

示例 1:

输入:nums = [12,6,1,2,7]
输出:77
解释:下标三元组 (0, 2, 4) 的值是 (nums[0] -nums[2]) * nums[4] = 77 。 可以证明不存在值大于 77 的有序下标三元组。

示例 2:

输入:nums = [1,10,3,4,19]
输出:133
解释:下标三元组 (1, 2, 4) 的值是 (nums[1] -nums[2]) * nums[4] = 133 。 可以证明不存在值大于 133 的有序下标三元组。

示例 3:

输入:nums = [1,2,3]
输出:0
解释:唯一的下标三元组 (0, 1, 2) 的值是一个负数,(nums[0] -nums[1]) * nums[2] = -3 。因此,答案是 0 。

提示:
3 < = n u m s . l e n g t h < = 100 3 <= nums.length <= 100 3<=nums.length<=100
1 < = n u m s [ i ] < = 1 0 6 1 <= nums[i] <= 10^6 1<=nums[i]<=106

分析:
根据数据范围可以发现, n u m s . l e n g t h nums.length nums.length最大也只是100,因此可以直接按照题意,暴力枚举满足题意的 i , j , k i,j,k i,j,k三个位置的数,计算出 ( n u m s [ i ] − n u m s [ j ] ) ∗ n u m s [ k ] (nums[i] - nums[j]) * nums[k] (nums[i]nums[j])nums[k]的值,用ans维护最大值即可。时间复杂度 O ( n 3 ) O(n^3) O(n3)

代码:

class Solution {
public:long long maximumTripletValue(vector<int>& nums) {int n=nums.size();long long ans=0;for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){for(int k=j+1;k<n;k++){ans=max(ans,(long long)(nums[i]-nums[j])*nums[k]);}}}return ans;}
};

有序三元组中的最大值 II

给你一个下标从 0 开始的整数数组nums。
请你从所有满足 i < j < k 的下标三元组 (i, j, k) 中,找出并返回下标三元组的最大值。如果所有满足条件的三元组的值都是负数,则返回 0 。
下标三元组 (i, j, k) 的值等于 (nums[i] - nums[j]) * nums[k] 。

示例 1:

输入:nums = [12,6,1,2,7]
输出:77
解释:下标三元组 (0, 2, 4) 的值是 (nums[0] -nums[2]) * nums[4] = 77 。 可以证明不存在值大于 77 的有序下标三元组。

示例 2:

输入:nums = [1,10,3,4,19]
输出:133
解释:下标三元组 (1, 2, 4) 的值是 (nums[1] -nums[2]) * nums[4] = 133 。 可以证明不存在值大于 133 的有序下标三元组。

示例 3:

输入:nums = [1,2,3]
输出:0
解释:唯一的下标三元组 (0, 1, 2) 的值是一个负数,(nums[0] -nums[1]) * nums[2] = -3 。因此,答案是 0 。

提示:
3 < = n u m s . l e n g t h < = 1 0 5 3 <= nums.length <= 10^5 3<=nums.length<=105
1 < = n u m s [ i ] < = 1 0 6 1 <= nums[i] <= 10^6 1<=nums[i]<=106

分析:
此题为有序三元组中的最大值I的加强版,即数据范围变大了,不可以在使用暴力 O ( n 3 ) O(n^3) O(n3)的方法完成。我们只能在 O ( n ) O(n) O(n)的时间复杂度下完成此题。
不难发现,要使得这个有序下标三元组最大,对于 j j j位置的数来说, i i i k k k位置的数都是越大越好,发现了这一点,后续就好处理了。只需要维护每一个 j j j位置的前缀最大值 p r e [ j ] pre[j] pre[j]和后缀最大值 s u f [ j ] suf[j] suf[j],以当前 j j j位置作为下标三元组中间位置的最大值即为 ( p r e [ j ] − n u m s [ j ] ) ∗ s u f [ j ] (pre[j]-nums[j])*suf[j] (pre[j]nums[j])suf[j]。即可在线性时间复杂度内完成该题目。
代码:

class Solution {
public:long long maximumTripletValue(vector<int>& nums) {//记录数组前面和后面的最大数int n=nums.size();vector<int>pre(n+1),suf(n+1);int ma=0;for(int i=0;i<n;i++){pre[i]=ma;ma=max(ma,nums[i]);}ma=0;for(int i=n-1;i>=0;i--){suf[i]=ma;ma=max(ma,nums[i]);}long long ans=0;for(int i=1;i<n-1;i++){//枚举中间的那个数字ans=max((long long)(pre[i]-nums[i])*suf[i],ans);}return ans;}
};

无限数组的最短子数组

给你一个下标从 0 开始的数组 nums 和一个整数 target 。
下标从 0 开始的数组 infinite_nums 是通过无限地将 nums 的元素追加到自己之后生成的。
请你从 infinite_nums 中找出满足 元素和 等于 target 的 最短 子数组,并返回该子数组的长度。如果不存在满足条件的子数组,返回 -1 。

示例 1:

输入:nums = [1,2,3], target = 5
输出:2
解释:在这个例子中 infinite_nums =[1,2,3,1,2,3,1,2,…] 。 区间 [1,2] 内的子数组的元素和等于 target = 5 ,且长度 length = 2 。 可以证明,当元素和等于目标值 target = 5 时,2 是子数组的最短长度。

示例 2:

输入:nums = [1,1,1,2,3], target = 4
输出:2
解释:在这个例子中 infinite_nums =[1,1,1,2,3,1,1,1,2,3,1,1,…]. 区间 [4,5] 内的子数组的元素和等于 target = 4 ,且长度length = 2 。 可以证明,当元素和等于目标值 target = 4 时,2 是子数组的最短长度。

示例 3:

输入:nums = [2,4,6,8], target = 3
输出:-1
解释:在这个例子中 infinite_nums =[2,4,6,8,2,4,6,8,…] 。 可以证明,不存在元素和等于目标值 target = 3 的子数组。

提示:
1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
1 < = n u m s [ i ] < = 1 0 5 1 <= nums[i] <= 10^5 1<=nums[i]<=105
1 < = t a r g e t < = 1 0 9 1 <= target <= 10^9 1<=target<=109

分析:
题目需要计算一个 i n f i n i t e n u m s infinite_nums infinitenums数组中是否能够组成和为 t a r g e t target target的值,我们可以想到,如果 t a r g e t target target能够被构成,则其是被 k k k n u n s nuns nuns数组的和 s u m sum sum以及一个余数 v v v构成,即 t a r g e t = k ∗ s u m + v , k > = 0 , 0 < = v < s u m target=k*sum+v,k>=0,0<=v<sum target=ksum+v,k>=0,0<=v<sum
所以我们主要讨论的是 v v v这个数字能否被 i n f i n i t e n u m s infinite_nums infinitenums数组构造出来,因为v是target除以sum的余数,所以 v < s u m v<sum v<sum,因此,如果v能够被构造出来,其肯定是在两个nums数组中的一段数字,且长度不超过n(只用考虑两个nums数组就可以考虑到从nums数组末加到nums数组开头)。
所以可以用双指针来对两个nums数组连接起来的数组进行构造,在右指针移动的同时,一旦当前和total>v,则左指针移动,最终维护一个构造出v值的最短子数组长度。
代码:

class Solution {
public:int minSizeSubarray(vector<int>& nums, int target) {int n=nums.size();long long sum=0;for(int i=0;i<n;i++)sum+=nums[i];int p=target/sum;//至少需要这么多个完整的数组int v=target%sum;//剩下的值,需要从剩下的两个数组中组成int total=0,minn=n;for(int left=0,right=0;right<2*n;right++){total+=nums[right%n];while(total>v)total-=nums[left%n],left++;if(total==v)minn=min(minn,right-left+1);}if(minn==n)return -1;return p*n+minn;}
};
http://www.hkea.cn/news/801340/

相关文章:

  • 网站不在首页显示出来做网络推广
  • 上海网站seo公司网页推广平台
  • 网站服务器租用价格表百度怎么发布自己的广告
  • 经纪人做网站技巧搜索引擎入口yandex
  • 教育网站制作哪家服务好全球外贸采购网
  • 响应式网络网站源码百度关键词查询网站
  • 南京网站制作设计公司网络运营团队
  • 阿里巴巴上怎样做自己的网站seo网站优化网站编辑招聘
  • 网站做付费推广都需要问什么网络热词2022
  • 给男票做网站表白的软件产品市场推广计划书
  • 西安网站制作定制怎么制作自己的个人网站
  • wordpress 如何移动端盐城seo优化
  • asp.net 制作网站开发百度竞价排名软件
  • 百度爱采购推广平台天津网络推广seo
  • 福州市闽侯县建设局网站推广引流吸引人的文案
  • wordpress目录 读写权限泰安短视频seo
  • 东莞建设网站流程澎湃新闻
  • 萧县住房和城乡建设局网站seo排名推广工具
  • 企业网站php模板下载百度百科官网首页
  • 做愛視頻网站在线网页制作网站
  • 织梦pc怎么做手机网站搜索引擎优化的基础是什么
  • 课程建设网站设计源码爱站网反链查询
  • 安徽省建设业协会网站个人网页制作教程
  • 好的摄影网站推荐福州seo顾问
  • html做的好看的网站如何宣传推广产品
  • 微信手机网站制作怎么引流客源最好的方法
  • 宿州建设网站公司前端seo搜索引擎优化
  • 做王境泽表情的网站百度seo关键词优化排名
  • 怎么选择无锡网站建设虚拟主机搭建网站
  • 做原油期货关注什么网站搜索引擎优化是做什么