首页 > 其他分享 >最大子矩阵和

最大子矩阵和

时间:2023-08-28 15:02:12浏览次数:31  
标签:q1 q2 最大 矩阵 pop 3x push Ba

Blah数集

大数学家高斯小时候偶然间发现一种有趣的自然数集合Blah,对于以a为基的集合Ba定义如下:
(1)a是集合Ba的基,且aBa的第一个元素;
(2)如果x在集合Ba中,则2x+13x+1也都在集合Ba中;
(3)没有其他元素在集合Ba中了。
现在小高斯想知道如果将集合Ba中元素按照升序排列,第N个元素会是多少?

暴力思路

i=1
q.push(a)
while(!q.empty() && i < N){
   x=q.pop() // 出队
   q.push(2x+1)
   q.push(3x+1)
   sort(q) // 入队的2x+1可能小于上次入队的3x+1(当N较大时可能会超时)
}
cout<<q.pop()

改进思路

  1. 数组ba存放集合
  2. 两个队列q1q2,分别放2x+13x+1——保证2个队列各自严格升序
  3. q1.push(a)q2.push(a)
  4. 每次分别取队头x1x2,二者最小值x放入ba
  5. q1q2删除x(若x1==x2,则都删
  6. q1.push(2x+1)q2.push(3x+1)
  7. 最后输出ba[N]
while (cin >> a >> n) {
    queue<int> q1;
    queue<int> q2;
    q1.push(a);
    q2.push(a);
    for (int i = 1; i <= n; i++) {
        int e1 = q1.front();
        int e2 = q2.front();
        int min = e1 > e2 ? e2 : e1;
        if (e1 > e2) {
            q2.pop();
        } else if (e1 < e2) {
            q1.pop();
        } else {
            q1.pop();
            q2.pop();
        }
        arr[i] = min;
        q1.push(2 * min + 1);
        q2.push(3 * min + 1);
    }
    cout << arr[n] << endl;
}

标签:q1,q2,最大,矩阵,pop,3x,push,Ba
From: https://www.cnblogs.com/algorithm-hu/p/17662066.html

相关文章

  • 绘制矩阵散点图
    什么是矩阵散点图当我们想要探索两组变量之间的关系时,矩阵散点图是一种有用的可视化工具。它能够帮助我们快速地观察多个变量之间的关联性,特别是在统计分析和数据挖掘领域中。矩阵散点图实际上是由多个散点图组成的矩阵,每个散点图表示两个不同变量之间的关系。绘制矩阵散点图......
  • 行列式、矩阵树定理
    推荐阅读:矩阵树定理(+行列式)-command_block的博客。行列式定义这个东西一般用于求解图的生成树个数(矩阵树定理)。称一个大小为\(n\timesn\)的矩阵\(A\)的行列式为\(\det(A)\)(或\(|A|\))。\[\det(A)=\sum_{p\texttt{是一个大小为n排列}}(-1)^{F(p)}\prod_{i=1}^{n}A......
  • 数组章节的进阶54. 螺旋矩阵
    54. 螺旋矩阵1classSolution:2defspiralOrder(self,matrix:List[List[int]])->List[int]:3m,n=len(matrix),len(matrix[0])4res=[]#存放遍历后的结果5startx=starty=067foroffsetinrange(min(m,......
  • 剑指 Offer 17. 打印从1到最大的n位数(简单)
    题目:classSolution{public:vector<int>printNumbers(intn){vector<int>result;intmax=pow(10,n)-1;//最大n位数的求法for(inti=1;i<=max;i++){result.push_back(i);}returnresul......
  • 剑指Offer 29. 顺时针打印矩阵
    题目链接:剑指Offer29.顺时针打印矩阵题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。解法思路:本题的题意比较简单,也就是螺旋打印矩阵,但是这里面有技巧,使用数组定义好在打印过程中的四个移动方向在遍历的过程中,每次都是在该方向上移动,当移动......
  • Leetcode_485. 最大连续 1 的个数
    题目描述给定一个二进制数组,计算其中最大连续1的个数。示例:输入:[1,1,0,1,1,1]输出:3解释:开头的两位和最后的三位都是连续1,所以最大连续1的个数是3.提示:输入的数组只包含0和1。输入数组的长度是正整数,且不超过10,000。参考实现示例1由于要累计最大连......
  • excel+python 根据A列分类查找B列值最大的C列元素
    根据C列分类查找B列值最大的C列元素1https://developer.aliyun.com/article/306428......
  • 稀疏矩阵的压缩存储及转置,快速转置法,C++代码实现
    /*稀疏矩阵的压缩存储及转置*/#include<iostream>usingnamespacestd;/*三元组顺序表的类型定义*/#defineitemSize100typedefstruct{introw,col;intitem;}thNode;typedefstruct{thNode*data;//data[0]不用intm,n,t;//分别表示行数、列......
  • 剑指Offer 17. 打印从1到最大的n位数
    题目链接:剑指Offer17.打印从1到最大的n位数题目描述:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数999。解法思路:利用上题中的代码,快速计算出10^n的值,然后依次将结果加到ans代码:funcprintNumbers(nint)[]int{......
  • 文理分科(最大流最小割定理)
    传送门数据范围一眼网络流。考虑每个人文理只能选一个,考虑最小割。考虑源点\(S\)向\((i,j)\)连一条费用为\(art_{i,j}\)的边,\((i,j)\)向汇点\(T\)连一条费用为\(science_{i,j}\)的边。若割\(S\)与\((i,j)\)的边,则表示\((i,j)\)不选文,若割\((i,j_\)与\(T\)的边,则表示\((i,j)\)不......