zoukankan      html  css  js  c++  java
  • codility上的练习(5)

    codility出了lesson 5了。

    (1) 合法括号序列,包括( [ { ) ] }这6种字符的字符串,长度N在[0..200000]范围内,为其是否合法。

    要求时间复杂度O(N),空间复杂度O(N)。

    用堆栈简单判断就可以了。

    // you can also use includes, for example:
    // #include <algorithm>
    #include <stack>
    int solution(const string &S) {
        // write your code in C++ 98
        int n = S.size();
        stack<int> s;
        for (int i = 0; i < n; ++i) {
            if (S[i] == ')') {
                if ((s.empty()) || (S[s.top()] != '(')) {
                    return false;
                }
                s.pop();
            }
            else if (S[i] == ']') {
                if ((s.empty()) || (S[s.top()] != '[')) {
                    return false;
                }
                s.pop();
            }
            else if (S[i] == '}') {
                if ((s.empty()) || (S[s.top()] != '{')) {
                    return false;
                }
                s.pop();
            }
            else {
                s.push(i);
            }
        }
        return s.empty();
            
                
    
                      
    }
    

    (2) x轴上有一群鱼,每条鱼的位置不同。每条鱼游动的方向可能沿着x正方向,也可能沿着x轴负方向。从左到右(沿着x轴正方向)知道每条鱼的大小和游动的方向,每条鱼的大小不同,游动速度一样,两条鱼相遇,大鱼会吃掉小鱼,问时间足够长之后能剩下多少条鱼。

    数据范围 鱼数 N [1..10^5],每条鱼游动的方向只能是+1和-1,鱼大小的范围[0..10^9]。要求复杂度 时间O(N),空间O(N)。

    这个题也不难因为每条鱼速度相同,所以只有反方向的鱼才可能相遇。 我们从左到右把往正方向游动的鱼压入堆栈,当出现第一条负方向游动的鱼时,不断从堆栈弹出那些鱼,这些鱼按顺序和这条鱼相遇,决定哪条被吃掉。直到这条负方向的鱼被吃掉或者堆栈为空。

    // you can also use includes, for example:
    // #include <algorithm>
    #include <stack>
    
    int solution(vector<int> &A, vector<int> &B) {
        // write your code in C++ 98
        int n = A.size(),m = n;
        stack<int> s;
        for (int i = 0; i < n; ++i) {
            if (B[i]) {
                s.push(A[i]);
            }
            else {
                while ((!s.empty()) && (s.top() < A[i])) {
                    s.pop();
                    --m;
                }
                if (!s.empty()) {
                    --m;
                }
            }
        }
        return m;
                
                
    }


    (3) sigma 2012

    http://blog.csdn.net/caopengcs/article/details/10260655

  • 相关阅读:
    Ogre中的旋转变换问题 Vector3 , Quaternion,matrix
    OIS几个重要的类的使用
    Ogre中的向量Vector3的成员方法
    用Ogre画三角形
    pitch yaw roll 的区别
    OGRE中用到的设计模式
    OGRE体系结构(类的继承关系)
    OGRE教程SceneNode, Entity, SceneManager and Get start 的讲解
    Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)
    Asp.Net Mvc2 OA工作流设计思路
  • 原文地址:https://www.cnblogs.com/riasky/p/3429076.html
Copyright © 2011-2022 走看看