zoukankan      html  css  js  c++  java
  • 今日头条笔试

    第一题

    题目描述:

    在n个元素的数组中,找到差值为k的数字对去重后的个数。

    输入描述:

    第一行,n和k,n表示数字个数,k表示差值

    第二行,n个正整数

    输出描述:

    差值为k的数字对去重后的个数

    示例 1

    5 3

    1 5 3 4 2

    输出

    3

    示例 2

    4 0

    1 1 1 1

    输出

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e6+7;
    int a[N];
    int main()
    {
        int n,k;
        scanf("%d%d",&n,&k);
        for(int i=0;i<n;++i) scanf("%d",&a[i]);
        sort(a, a+n);
        n = unique(a, a+n) -a;
        int r = 0, ans=0;
        for(int l=0; l<n;++l)
        {
            while(r<n&&a[r]-a[l]<k) ++r;
            if(r==n) break;
            if(a[r]-a[l] == k) ++ans;
        }
        printf("%d
    ", ans);
        return 0;
    }

     第二题

    题目描述:

    定义两个字符变量:s和m,再定义两种操作,

    第一种操作:

    m=s;

    s=s+s;

    第二种操作:

    s=s+m;

    假设初始化如下:

    s="a"; m=s;

    求最小的操作步骤数,可以将s拼接到长度等于n;

    该题的解放有多种,我在这介绍两种思路:1.dfs 2. bfs

    DFS

    #include <iostream>
    #include<map>
    using namespace std;
    int minStep=INT_MAX;
    void dfs(string s,string m,int step,int n){
        if(s.size()>=n){
            if(s.size()==n)
            {
                minStep=(step<minStep?step:minStep);
            }
        }
        else{
            dfs(s+s,s,step+1,n);
            dfs(s+m,m,step+1,n);
        }
    }
    
    int getMinStep(int n)
    {
        dfs("a","a",0,n);
        return minStep;
    }
    
    int main(){
        int n;
        while(cin>>n){
            cout<<getMinStep(n)<<endl;
        }
    }

    BFS

    #include <bits/stdc++.h>
    using namespace std;
    map<int,map<int,int> >mmp;
     
    int main(){
        int n;
        while(~scanf("%d",&n)){
            int s = 1,m = 1;mmp.clear();
            queue<pair<pair<int,int>,int > >q;
            q.push({{s,m},0});
            mmp[1][1] = 1;
            int ans = 0;
            while(!q.empty()){
                int ss = q.front().first.first;
                int mm = q.front().first.second;
                int step = q.front().second;
                q.pop();
                if(ss == n){
                    ans = step;
                    break;
                }
                if(ss > n) continue;
                if(!mmp.count(ss+mm) || !mmp[ss+mm].count(mm)){
                    q.push({{ss+mm,mm},step+1});
                    mmp[ss+mm][mm] = 1;
                }
                if(!mmp.count(ss+ss) || !mmp[ss+ss].count(ss)){
                    q.push({{ss+ss,ss},step+1});
                    mmp[ss+ss][ss] = 1;
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    102/107. Binary Tree Level Order Traversal/II
    110. Balanced Binary Tree
    SQL SERVER select,update,delete使用表别名
    C# 有哪些集合
    C# 流总结
    How ASP.NET MVC Works ? (Artech)
    c#扩展方法
    使用缓存的九大误区
    9中浏览器端缓存
    理解AppDomain和AppPool
  • 原文地址:https://www.cnblogs.com/ktao/p/8642579.html
Copyright © 2011-2022 走看看