zoukankan      html  css  js  c++  java
  • LeetCode Contest 181

    40分钟刷完4题,打破自己的最高纪录
    第一题

    class Solution {
    public:
        vector<int> createTargetArray(vector<int>& nums, vector<int>& index) {
            
             vector<int> ans;
            
             for(int i=0;i<nums.size();i++)
             {
                 int pos = index[i];
                 ans.push_back(-1);
                 for(int j=ans.size()-1;j>=pos+1;j--)
                 {
                     ans[j]=ans[j-1];
                 }
                 ans[pos]=nums[i];
             }
            return ans;
        }
    };
    

    第二题

    遍历除数的时候从1到sqrt(nums[i])
    10000*sqrt(100000) 是不会超时的

    class Solution {
    public:
        int sumFourDivisors(vector<int>& nums) {
            
            int ans=0;
            for(int i=0;i<nums.size();i++)
            {
                int res=0;
                int tag=0;
                for(int j=1;j*j<=nums[i];j++)
                {
                    if(nums[i]%j==0)
                    {
                        if(j!=nums[i]/j)
                        {
                            res+=j;
                            res+=nums[i]/j;
                            tag+=2;
                        }
                        else
                        {
                            tag++;
                            res+=j;
                        }
                    }
                }
                if(tag==4)
                    ans+=res;
            }
            
            return ans;
            
        }
    };
    

    第三题

    广搜,深搜都可以。

    struct Node
    {
        int x;
        int y;
        Node(){}
        Node(int x,int y)
        {
            this->x = x;
            this->y = y;
        }
    };
    
    class Solution {
    public:
        int vis[500][500];
        int dir[6][2][2]={{{0,-1},{0,1}},{{-1,0},{1,0}},{{0,-1},{1,0}},{{0,1},{1,0}},{{0,-1},{-1,0}},{{0,1},{-1,0}}};
        bool hasValidPath(vector<vector<int>>& grid) {
            queue<Node> q;
            q.push(Node(0,0));
            vis[0][0]=1;
            int n=grid.size();
            int m=grid[0].size();
            while(!q.empty())
            {
                Node term = q.front();
                q.pop();
                
                if(term.x==n-1&&term.y==m-1)
                    return true;
                
                int x = grid[term.x][term.y];
                
                for(int i=0;i<2;i++)
                {
                    int xx = term.x + dir[x-1][i][0];
                    int yy = term.y + dir[x-1][i][1];
                    
                    if(xx<0||xx>=n||yy<0||yy>=m)
                        continue;
                    if(vis[xx][yy]==1)
                        continue;
                    
                    if(!judge(x,i,grid[xx][yy]))
                        continue;
                    
                    vis[xx][yy]=1;
                    q.push(Node(xx,yy));
                }
                
            }
            return false;
        }
        
        bool judge(int x,int z,int y)
        {
            if(x==1&&z==0&&(y==1||y==4||y==6))
                return true;
            if(x==1&&z==1&&(y==1||y==3||y==5))
                return true;
            if(x==2&&z==0&&(y==2||y==3||y==4))
                return true;
            if(x==2&&z==1&&(y==2||y==5||y==6))
                return true;
            if(x==3&&z==0&&(y==1||y==4||y==6))
                return true;
            if(x==3&&z==1&&(y==2||y==3||y==5))
                return true;
            
            if(x==4&&z==0&&(y==1||y==3||y==5))
                return true;
            if(x==4&&z==1&&(y==2||y==5||y==6))
                return true;
            
             if(x==5&&z==0&&(y==1||y==4||y==6))
                return true;
            if(x==5&&z==1&&(y==2||y==3||y==4))
                return true;
            
             if(x==6&&z==0&&(y==1||y==3||y==5))
                return true;
            if(x==6&&z==1&&(y==2||y==3||y==4))
                return true;
            return false;
        }
    };
    

    第四题

    KMP 的求最长公共前后缀的部分,就是Next的部分

    class Solution {
    public:
        int next[100005];
        string longestPrefix(string s) {
            
            getNext(s);
            
            int len = next[s.length()-1];
            
            string ans="";
            for(int i=0;i<len;i++)
            {
                ans+=s[i];
            }
            
            return ans;
            
            
        }
        
        void getNext(string str)
        {
            next[0]=0;
            for(int i=1;i<str.length();i++)
            {
                int k=next[i-1];
                while(k!=0&&str[i]!=str[k])
                {
                    k=next[k-1];
                }
                
                
                if(str[i]==str[k])
                    next[i]=k+1;
                else
                    next[i]=0;
                
            }
        }
    };
    
  • 相关阅读:
    设计模式-原型模式(06)
    看起来很懵的java内存加载面试题
    回数
    花式赋值
    常量
    Python解释器安装
    计算机基础小结
    网络的瓶颈效应
    __init__和__new__
    super()方法详解
  • 原文地址:https://www.cnblogs.com/dacc123/p/12546354.html
Copyright © 2011-2022 走看看