精华内容
下载资源
问答
  • 最大5个

    千次阅读 2013-04-29 21:54:49
    记得以前在csdn上看过一个面试题,当时是开了一个长度为5...考虑如果手里已经抓着5个最大数, * 再来一个数据怎么办呢?让它和手里的数据比,如果比哪个大,就抢占它的座位, * 让那个被挤出来的再自己找位子,....

    记得以前在csdn上看过一个面试题,当时是开了一个长度为5的数组模拟的,直接先取前5个数,找到最小值

    依次把后面的数和最小的比较,若大则替换,之后再找出最小数。

    下面是另外一种方法:

    /**
     * 以下的代码采用了另外的思路。考虑如果手里已经抓着5个最大数,
     * 再来一个数据怎么办呢?让它和手里的数据比,如果比哪个大,就抢占它的座位,
     * 让那个被挤出来的再自己找位子,....
     */
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.Vector;
    
    public class Cow
    {
    		public static List<Integer> max5(List<Integer> lst)
    		{
    			if(lst.size()<=5) return lst;
    			
    			int a = lst.remove(0);  // 填空
    			List<Integer> b = max5(lst);
    			
    			for(int i=0; i<b.size(); i++)
    			{
    				int t = b.get(i);
    				if(a>t)
    				{
    					b.set(i, a);  // 填空
    					a = t;  
    				}
    			}
    			
    			return b;
    		}
    		
    		public static void main(String[] args)
    		{
    			List<Integer> lst = new Vector<Integer>();
    			lst.addAll(Arrays.asList(12,127,85,66,27,34,15,344,156,344,29,47));		
    			System.out.println(max5(lst));
    		}
    }

    不是为了做题而做题,而是捕获新思想!

    展开全文
  • 这个问题最好的办法应该是自底向上来寻找最大加和,因为如果自顶向下加和的话,我们会发现,会出现下面的两个数据公用上面一个数据的情况,我们不好决定这个数据加到下一行的哪个数据上,如果单纯地只是找下一行较大...

    问题描述

    在这里插入图片描述找出数字三角形从上至下直接相邻的数字的最大和,每一行只能选出一个数字。

    题目分析

    我们按照一个一个类似矩阵的形式输入我们的数据,为了防止开辟多余的空间,我们直接在原输入的半矩阵上进行操作。
    这个问题最好的办法应该是自底向上来寻找最大加和,因为如果自顶向下加和的话,我们会发现,会出现下面的两个数据公用上面一个数据的情况,我们不好决定这个数据加到下一行的哪个数据上,如果单纯地只是找下一行较大的数相加的话,由于不知道后几行的数字变化,所以这种方法并不对。因为有可能这个较大数字的后面几行相邻数字非常小。类似第2行的8后面的数字。
    自底向上的方法,是将下一行的值加到当前行,并对当前行的数进行更新,在这里我们先从第3行开始。
    我们要将第4行的数加到第3行的数上,但是又不能盲目地全部加进去,应该有选择地加入。具体看下图:
    在这里插入图片描述
    我们从倒数第二行开始,找它的下一行相邻的两个数中的较大值与当前行的值相加,即

    array[row][col] += max(array[row+1][col],array[row+1][col+1])

    代码

    #include <iostream>
    using namespace std;
    int main()
    {
        int n;//行数
        cin>>n;
        int array[n][n];
        int number;
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < i + 1;j++)
            {
                cin>>array[i][j];
            }
        }
        for(int row = n - 2;row >= 0;row--)
        {
            for(int col = 0;col <= row;col++)
            {
                if(array[row+1][col] > array[row+1][col+1])
                    array[row][col]+=array[row+1][col];
                else
                    array[row][col] += array[row+1][col+1];
            }
        }
        cout<<array[0][0];
        return 0;
    }
    

    总结

    时间复杂度O(n^2)
    空间复杂度O(n^2)

    展开全文
  • 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 示例: 思路...

    222. 完全二叉树的节点个数

    难度中等

    给出一个完全二叉树,求出该树的节点个数。
    说明:
    完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
    示例:
    在这里插入图片描述

    思路1.0:

    不是随便哪个遍历都行嘛。。

    代码:

      class Solution {
      public:
          void PreOrder(TreeNode* Tnode, int& rst)
          {
              if (Tnode != NULL)
              {
                  ++rst;
                  PreOrder(Tnode->left,rst);
                  PreOrder(Tnode->right,rst);
              }
          }
          int countNodes(TreeNode* root) {
              int rst = 0;
              PreOrder(root, rst);
              return rst;
          }
      };
    
    展开全文
  • HDU 3564 Another LIS splay(水

    千次阅读 2014-10-23 12:02:10
    下面n个表示i插在哪个位置。 每插入一个后输出这个序列的lis 然后。。。 因为每次插入的都是当前序列最大 所以不会影响后面的的dp值 那么这个位置的dp值就是插入位置的前面最大dp值+1 然后输出这...

    题意:

    给定一个空序列

    插入n个数(依次插入 1、2、3、4··n)

    下面n个数表示i插在哪个位置。

    每插入一个数后输出这个序列的lis

    然后。。。

    因为每次插入的数都是当前序列最大的数

    所以不会影响后面的数的dp值

    那么这个位置的dp值就是插入位置的前面最大dp值+1

    然后输出这个序列最大的dp值。

    ==

    思路:

    splay。。。

    Q:为何这题需要用splay,不是简单的线段树吗

    A: 因为我智商不够想不出线段树怎么写。。


    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <queue>
    #include <algorithm>
    #include <map>
    #include <cmath>
    template <class T>
    inline bool rd(T &ret) {
    	char c; int sgn;
    	if(c=getchar(),c==EOF) return 0;
    	while(c!='-'&&(c<'0'||c>'9')) c=getchar();
    	sgn=(c=='-')?-1:1;
    	ret=(c=='-')?0:(c-'0');
    	while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
    	ret*=sgn;
    	return 1;
    }
    template <class T>
    inline void pt(T x) {
        if (x <0) {
            putchar('-');
            x = -x;
        }
        if(x>9) pt(x/10);
        putchar(x%10+'0');
    }
    using namespace std;
    inline int Mid(int a,int b){return (a+b)>>1;}
    #define N 100010
    #define L(x) tree[x].ch[0]
    #define R(x) tree[x].ch[1]
    #define Siz(x) tree[x].siz
    #define Father(x) tree[x].fa
    #define Max(x) tree[x].max
    #define Val(x) tree[x].val
    #define Pt(x) tree[x].pt()
    struct node{
        int ch[2], siz, fa;
        int max, val;
        void pt(){printf("val:%d max:%d siz:%d fa:%d{%d,%d}\n", val,max,siz,fa,ch[0],ch[1]);}
    }tree[N*2];
    int tot, root;
    void Newnode(int &id, int val, int fa, int siz = 1){
        id = ++tot;
        L(id) = R(id) = 0;
        Father(id) = fa;
        Siz(id) = siz;
        Max(id) = Val(id) = val;
    }
    
    void push_up(int id){
        Siz(id) = Siz(L(id)) + Siz(R(id)) +1;
        Max(id) = max(Max(R(id)), Max(L(id)));
        Max(id) = max(Val(id), Max(id));
    }
    void push_down(int id){}
    
    void Rotate(int id, int kind){
        int y = Father(id);
        push_down(y); push_down(id); //here
        tree[y].ch[kind^1] = tree[id].ch[kind];
        Father(tree[id].ch[kind]) = y;
        if(Father(y))
            tree[Father(y)].ch[R(Father(y))==y] = id;
        Father(id) = Father(y);
        Father(y) = id;
        tree[id].ch[kind] = y;
        push_up(y);
    }
    void splay(int id, int goal){
        push_down(id);
        while(Father(id) != goal){
            int y = Father(id);
            if(Father(y) == goal)
                Rotate(id, L(y)==id);
            else
            {
                int kind = L(Father(y)) == y;
                if(tree[y].ch[kind] == id)
                {
                    Rotate(id, kind^1);
                    Rotate(id, kind);
                }
                else
                {
                    Rotate(y, kind);
                    Rotate(id,kind);
                }
            }
        }
        push_up(id);
        if(goal == 0)root = id;
    }
    int Get_kth(int kth, int sor){//找到在sor后面的第k个数
        push_down(sor);
        int id = sor;
        while(Siz(L(id)) != kth){
            if(Siz(L(id)) > kth)
                id = L(id);
            else
            {
                kth -= (Siz(L(id))+1);
                id = R(id);
            }
            push_down(id);
        }
        return id;
    }
    void init(){
    	Father(0) = L(0) = R(0) = Siz(0) = 0;
    	Max(0) = 0;
    	tot = 0;
    	Newnode(root, 0, 0);
    	Newnode(R(root), 0, root);
    	push_up(root);
    }
    void debug(int x){
    	printf("%d:\n", x);
    	Pt(x);
    	if(L(x))
    		debug(L(x));
    	if(R(x))
    		debug(R(x));
    }
    void insert(int pos){
    	splay(1, 0);
    	int u = Get_kth(pos, 1);
    //	if(pos == 2){cout<<"=="; debug(root);}
    	int v = Get_kth(pos+1, 1);
    	splay(u, 0);
    	splay(v, root);
    //	if(pos == 2){cout<<"=="; debug(root);}
    	Newnode(L(v), max(Val(root), Max(L(root))) +1, v);
    	push_up(v);
    	push_up(u);
    //	printf("[%d,%d]\n", u, v);
    }
    
    int n;
    int main() {
    	int T, Cas = 1; cin>>T;
        while(T--){
        	rd(n);
        	init();
        //	debug(root);
        	printf("Case #%d:\n", Cas++);
        	for(int i = 1, m; i <= n; i++){
        		rd(m);
        		insert(m);
        	//	printf("id:%d, pos:%d\n", i, m);    		debug(root);
        		pt(Max(root)); putchar('\n');
        		splay(tot, 0);
        	//	puts("================");debug(root);
        	}/**/
            puts("");
        }
        return 0;
    }
    /*
    1
    7
    0 1 1 1 0 4 1
    
    */


    展开全文
  •  问[L,R]中的哪个数与X异或值最大,输出这个最大值。 可持久化trie的模板题,下面简说一下: 1,根据异或的特征,将数都转换成二进制,自然越是高位与X不同,所得的值越大,所以将数按从高位到低位插入到01trie...
  • SGU 210 Acdream 1227 Beloved Sons KM

    千次阅读 2014-10-05 18:58:06
    下面n行i行表示第i个人可以获得哪些(数字从1-n,且不能重复分配) 若这个人获得了数字则你可以获得他的权值。 要你能获得的权值和最大。 问: 输出每个人应该获得哪个数字,若没有获得到数字则输出0. 思路: KM...
  • [ProjectEuler.net] 14

    2012-02-03 01:21:00
    求在100万以下的数中,哪个数产出的序列最长。 产出的序列中会包含很多以前计算过的,所以要缓存起来,以下使用了字典。 要注意的是当一个数很大的时候,如果是奇数,那么下一个数可能会超出类型的最大值...
  • 结构体内存对齐

    2017-07-08 12:35:50
    关于结构体的内存对齐文体,主要遵循下面几个原则,记住就好。 1.结构体的第一个成员永远都...3.结构体的总大小必须是最大对齐的整数倍。 注意:0偏移处大家可能有所疑问,其实就是系统默认从哪个位置开始分配内存
  • 1.存在使i + 1 < i的吗() 答案:存在 解析:如果i为int型,那么当i为...下面哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D InputStreamReader 答案:D 解析:J
  • 亚信科技运维实习生(笔试)

    千次阅读 多人点赞 2021-06-02 21:27:37
    感觉还行,最起码还能做 文章目录运维基础部分:1....下面定义的变量能执行哪个操作?网络知识1.HTTP服务和SMTP服务的服务器使用哪个协议绑定接口函数?2.计算机网络中广域网和局域网的分类是以()来划分的?3
  • Ten Googol 程序的写法

    2020-02-08 22:53:47
     我们注意到,66对应的字母长度为8(特别提醒:连接符不算在内),不管之后跟着哪个数,它都应该有9个字母,而且应该是9个字母拼出的数字里最大的。仔细找一下,你可能就会得出ninety-six(96)。不可能是100以上的...
  •  我们注意到,66对应的字母长度为8(特别提醒:连接符不算在内),不管之后跟着哪个数,它都应该有9个字母,而且应该是9个字母拼出的数字里最大的。仔细找一下,你可能就会得出ninety-six(96)。不可能是100以上的...
  • HDU 1176 免费馅饼

    2011-04-20 19:12:00
    这题是一最优子结构的题,我开始暴力,结果一直TLE,最后听小白说这是一最优子问题,极像塔,怎么像...这样不久像极了一个塔么,要先解决下面的才知道上面的,而没一层的每一个又跟哪个有关系呢?显然由题意有每...
  • 最大每行单元格依据最一个数组的健值对个 当数据的pid 和 id 一样的话向下合并 model_name 指的是单元格显示内容 model_id 指的是单元格对应的值的key id 单元格唯一标示 pid 在哪个单元格...
  • Ten Googol

    2017-09-30 05:56:18
     我们注意到,66对应的字母长度为8(特别提醒:连接符不算在内),不管之后跟着哪个数,它都应该有9个字母,而且应该是9个字母拼出的数字里最大的。仔细找一下,你可能就会得出ninety-six(96)。不可能是100以上的...
  • DescriptionInputOutput输出一行一个表示最大的宝藏之和Sample Inputinput 1: 1 5 3 1 2 3 4 5 input 2: 2 5 6 5 1 3 4 2Sample Outputoutput 1: 6 output 2: 22Solution一道水题,我太垃圾了,没有看出来...
  • 请问反射最大程度破坏了面向对象的以下哪个特性?4.下面字段声明中哪一个在interface主体内是合法的?6.以下哪项不属于java类加载过程?7.Java1.8之后,Java接口的修饰符可以为8.在java7中,下列不能做switch()的参数...
  • 题意:给你N种立方体,每种立方体个不限,让你堆塔,求塔最大高度,堆塔的条件是 每一个立方体的长和宽 必须严格大于它下面的立方体的长和宽,因为每个立方体个无限,所以必须要进行排序了,不需要按照堆塔的...
  • //题意: 问最少从哪个位置起(包括本身) , 将这些数字对移动到最后”接着”, 使得可以将所有的牌拿完, 拿相应上一堆的要付出下面那么多数的代价. 中途不允许出现小于0的情况. //思路: 直接算出最后的序列(c[i] = ...
  • 杰奇wap插件

    2013-09-27 13:19:45
    第一个红框填写的数组是调用条,第二个红框是数据库的字段,你想按照哪个字段派顺序就填字段名,后面的desc是最大数字先,如果想最小数字先改为asc 下面的连接是显示方式, $showlists[i].字段名 来调用参数 URL...
  • 简单的用中位的方法可能会使得训练不如预期,所以我们要选择划分之后信息增益最大的划分点。对于属性a,我们有下面n-1个元素可以被选作划分点。 信息增益定义为: 其中Gain(D,a,t)是样本集D基于划分...
  • 分而治之求 一个数列最大连续子数列和。 原理 利用递归的思想,将数列不断地分成两半,分到最小时为一个。返回一个初值,然后再判断4,-3,4+(-3),哪个大,在返回4,再判断5与-2,返回5,再判断4与,依次类推。...
  • 统计当前每个点的最短路中所包含的边即路径长度,如果某点的最短路所包含的边大于等于n,则说明存在环。 我们下面以方法2为思路解决问题:  n个点的路径长度最大为n-1,所以当以某个顶点结尾的最短路径长度&...
  • 下面内容来自大神的总结:(哪个大神?我也不知道)1、 如果能将类的方法定义成 static,就尽量定义成 static,它的速度会提升将近4倍。2、$row['id'] 的速度是$row[id]的7倍。3、echo 比 print 快,并且使用 echo ...
  • 结果,实施和所有相关内容可以在下面找到。 该存储库概述 阅读论文后,人们可能会愿意评估结果和/或将其用于自己的工作中。 接下来,我们描述此存储库中的文件,以便向读者介绍如何使用它们。 Solver.m: 计算给定...
  • lwbt的内存分配详解

    千次阅读 2012-10-17 18:17:28
    在这个数组中规定了哪一段是属于哪个类型的,这样做的方法不是很科学,是通过规定各个类型结构的最大能用的个数来取的。Hci_pcb数组中的元素是每个类型的大小。memp_tab首先来看下memp数组中的元素都是这个结构的...
  • ②一张图纸出1层铜公:“模仁层”是您的模仁放在哪个层中。“铜公层--从”是您需要出放电的铜公从这个层开始。“铜公层--到” 是您需要出放电的铜公到这个层结束。“铜公图增加到目前的图纸中”是把开始出放电...
  • 又如求1余0,2余1,3余0,4余1,5差1,6余3,7余0,8余1,9余0,求满足条件的最小正整数 输入1,0,2,1,3,0,4,1,5,4,6,3,7,0,8,1,9,0显示符合条件的整数是1449+2520K(K是任意整数)最小正整数 是1449,这是...
  • 输出了一下我发现问题是处在哪个getline的流位置上,由数据可以看出来除了第一个的位置比较奇怪后面的都是按照哪个相对值进行递增的,所以现在最大是问题也就在那个getline的流位置 每次运行第一个getline的流位置...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 125
精华内容 50
关键字:

下面哪个数最大