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

深圳公司名称大全什么叫seo优化

深圳公司名称大全,什么叫seo优化,手表网站排名前十,做网站的合作案例题目列表 2864. 最大二进制奇数 2865. 美丽塔 I 2866. 美丽塔 II 2867. 统计树中的合法路径数目 一、最大二进制奇数 这题只要你对二进制有了解(学编程的不会不了解二进制吧),应该问题不大,这题要求最大奇数,1.奇数:只要保证…

题目列表

2864. 最大二进制奇数

2865. 美丽塔 I

2866. 美丽塔 II

2867. 统计树中的合法路径数目

一、最大二进制奇数

这题只要你对二进制有了解(学编程的不会不了解二进制吧),应该问题不大,这题要求最大奇数,1.奇数:只要保证二进制的最低位上是1就行(这里为不了解二进制的同学解释一下,二进制从低位到高位的权重分别是2^0,2^1,2^2...即除了最低位其他位都是偶数,所以最低位必须是1)

2.最大:贪心,我们将除了最低位的1之外的所有1都往高位放,得到的数肯定是最大的

代码如下

class Solution {
public:string maximumOddBinaryNumber(string s) {int cnt1=count(s.begin(),s.end(),'1');return string(cnt1-1,'1')+string(s.size()-cnt1,'0')+'1';}
};

二、美丽塔I

 这题的数据范围比较小,可以直接暴力,将每一个元素都当成山顶算一遍最大高度,然后比较得到最大高度,代码如下

class Solution {
public:long long maximumSumOfHeights(vector<int>& maxHeights) {long long ans=0;int n=maxHeights.size();for(int i=0;i<n;i++){long long res=maxHeights[i];for(int j=i-1,Min=maxHeights[i];j>=0;j--){Min=min(Min,maxHeights[j]);res+=Min;}for(int j=i+1,Min=maxHeights[i];j<n;j++){Min=min(Min,maxHeights[j]);res+=Min;}ans=max(ans,res);}return ans;}
};

三、美丽塔II

这题的题目和上一题一样,只是加大了数据范围,即不能用暴力枚举的方法解题,那么我们怎么优化算法呢?关键在于发现上面一题的算法中有什么是被重复计算的我们只要减少这些无用的运算,就能实现算法的时间复杂度优化。

为了方便叙述,我将山顶前面的部分称为上坡,山顶后面的部分称为下坡,很显然,上面算法在每次计算上坡/下坡时,总是不断的遍历之前就已经遍历过的元素,那么我们如何根据已经遍历过的元素来求出当前的上坡/下坡的高度呢?而且上坡和下坡的计算是分开的互不影响的,只要我们提前处理出各种上坡和下坡的高度,我们就能在O(n)的时间里得到最大高度。

如何利用之前遍历的元素信息,得到当前的上坡/下坡的高度?以计算上坡为例,解析如下

代码如下 

class Solution {
public:long long maximumSumOfHeights(vector<int>& maxHeights) {long long ans=0;int n=maxHeights.size();vector<long long>pre(n),suf(n);//分别代表以i为山顶的上坡和下坡stack<int>st;//里面存放下标,方便计算出栈个数和索引高度st.push(-1);//这里是为了方便计算,简化逻辑for(int i=0;i<n;i++){while(st.size()>1&&maxHeights[i]<maxHeights[st.top()])st.pop();int idx=st.top();pre[i]=(idx<0?0:pre[idx])+1LL*(i-st.top())*maxHeights[i];st.push(i);}st=stack<int>();//让栈为空st.push(n);//这里是为了方便计算,简化逻辑for(int i=n-1;i>=0;i--){while(st.size()>1&&maxHeights[i]<maxHeights[st.top()])st.pop();int idx=st.top();suf[i]=(idx==n?0:suf[idx])+1LL*(st.top()-i)*maxHeights[i];st.push(i);}for(int i=0;i<n;i++){ans=max(ans,pre[i]+suf[i]-maxHeights[i]);}return ans;}
};

这里说明一下算法的时间复杂度为O(n),有人或许看到求pre/suf中有两层循环,就认为时间复杂度为O(n^2),但其实不是,我们来看一下while循环里面的出栈语句执行了多少次,因为我们入栈的元素是n个,所以出栈的元素也只能是n个,所以这条语句只能执行n次,所以时间复杂度为O(n)

四、统计树种的合法路径数量

这题求路径个数,首先读懂题意,要求路径上包含一个质数,那么我们是从质数出发好,还是从非质数出发好呢?我们只要稍稍想一下就会发现从质数出发好,因为这样我们只要找到下一个质数就停止,而从非质数出发,我们就需要连续找到两个质数,很显然从非质数出发要处理的情况更多,所以我们从质数出发找路径,当然注意这题的路径至少需要两个结点(看示例一)

那么我们从质数出发怎么算呢?(判断质数就不讲了,不会的可以去看Leetcode-352周赛的第二题)

其他的路径求解方法同上,代码如下

//埃氏筛
const int MX=1e5;
vector<bool>is_prime(MX+1,true);
int init=[](){is_prime[1]=false;for(int i=2;i*i<=MX;i++){if(is_prime[i]){for(int j=i*i;j<=MX;j+=i){is_prime[j]=false;}}}return 0;
}();
class Solution {
public:long long countPaths(int n, vector<vector<int>>& edges) {vector<vector<int>>g(n+1);for(auto&e:edges){int x=e[0],y=e[1];g[x].push_back(y);g[y].push_back(x);}//计算质数结点连接的每一个子树中的非质数结点个数vector<int>sz(n+1);vector<int>nodes;function<void(int,int)> dfs=[&](int x,int fa){nodes.push_back(x);for(int y:g[x])if(y!=fa&&!is_prime[y])dfs(y,x);};long long ans=0;for(int x=1;x<=n;x++){if(!is_prime[x]) continue;int sum=0;for(int y:g[x]){if(is_prime[y]) continue;if(sz[y]==0){nodes.clear();dfs(y,-1);for(int z:nodes){sz[z]=nodes.size();}}    ans+=(long long)sum*sz[y];//以i为中间点的路径sum+=sz[y];}ans+=sum;//以i为端点的路径}return ans;}
};

http://www.hkea.cn/news/318790/

相关文章:

  • 网站建设的方案费用2023年新冠疫情最新消息
  • 九星市场做网站快速将网站seo
  • 长春做网站推广的公司提升神马关键词排名报价
  • 金融网站cms百度网盘客服电话人工服务
  • 美观网站建设物美价廉seo网站优化专员
  • 网站设计应该怎么做推广软文代写
  • 网站建设工作室发展百度收录教程
  • 没有网站 可以做百度口碑吗成都网站制作
  • 医院系统网站建设百度宁波营销中心
  • 网站劫持代码杭州互联网公司排名榜
  • 做网站找哪个部门吸引人的推广标题
  • 网站制作软件名字线做竞价推广代运营公司
  • avada如何做中英文网站沈阳百度推广排名优化
  • 做网站品长沙网络营销公司排名
  • b2b商贸网站环球网最新消息疫情
  • wordpress next主题什么是seo教程
  • 如何规划一个网站快手秒赞秒评网站推广
  • 中国网站开发网站seo需要用到哪些工具
  • 织梦做的网站首页出现空白网页平台做个业务推广
  • 备案做电影网站吗yandx引擎入口
  • 网站双倍浮动百度账号登陆入口
  • 聊城市网站建设网站推广排名
  • 帝国新闻网站模板百度seo推广怎么做
  • 预约做港澳证的网站网站排名在线优化工具
  • 罗湖实惠的网站建设费用成都官网seo厂家
  • 建设部官方网站有哪些优帮云排名优化
  • 天津做网站找谁新东方在线教育平台官网
  • 南宁做网站在哪了日本预测比分
  • 咋样查看网站用什么编程语言做的9个广州seo推广神技
  • 网站链接太多怎么做网站地图谷歌广告