zoukankan      html  css  js  c++  java
  • 2017腾讯实习笔试题

    三道编程题在60分钟内做出来并不容易,加油吧

    这题做出来容易,但在规定的时间内跑出结果并不容易,参考网友的答案:

    #include<iostream>
    #include<string>
    using namespace std;
     
    bool isCap(char c)
    {
        if (c >= 'A' && c <= 'Z')
            return true;
        else
            return false;
    }
     //用位运算交换
    void mSwap(char &a, char &b)
    {
        if (a != b)
        {
            a ^= b;
            b ^= a;
            a ^= b;
        }
    }
      
    int main()
    {
        string s;
        while (cin >> s)
        {
            int len = s.size();
            int end = len;
            for (int i = 0; i<end; ++i)
            {
                if (isCap(s[i]))
                {
                    int j = i;
                    for (; j<len- 1; ++j)
                        mSwap(s[j], s[j + 1]);
                    --end;//精华!
                    --i;
                }
            }
            cout << s <<endl;
        }
        return 0;
    }
    View Code

     思路:

        1.先排序
             特殊情况:如果排完序之后发现数组中所有数都相同,直接输出结果
                 结果为:差最大个数 = 差最小个数 = (n * (n-1))/2;(两两组合)
        2.统计数组中每种数字的个数(这里用的map)
        3.计算差最小个数
            3.1.如果数组中没有重复数字,说明最小差不为0,最小差肯定是数组中相邻两个数的差
                因此,遍历一边数组,计算并统计最小差。
            3.2.如果数组中有重复数字,说明最小差是0,此时,遍历一边map,数字个数不为0的
                数字会产生最小差0,利用公式计算即可
        4.计算差最大个数
            只有一种情况,最大值与最小值的两两组合,即最大值个数 * 最小值个数
    写出的代码结果一直不正确,有空再看看。
    void process(vector<int>& vec, int num)
    {
        int max=0, min=0;
        unordered_map<int, int>num_count;
        if (num > 1)
        {
            sort(vec.begin(), vec.end());
            //如果全部元素相同,直接输出结果
            if (*vec.begin() == *(vec.end() - 1))
            { 
                max = num*(num - 1) / 2;
                min = max;
            }
            else
            {
                for (auto it = vec.begin(); it != vec.end(); it++)
                {
                    num_count[*it]++;
                }
    
                //计算最小差个数
                
                for (const auto &data : num_count)
                {
                    //如果数字个数超过1,则最小差为0,遍历并统计map中大于1的个数。
                    if (data.second > 1)
                        min += data.second*(data.second - 1) / 2;
                }
                //如果数字无重复,最小差(绝对值)为排序数组相邻元素的差
                if (min == 0)
                {
                    int min_data = INT_MAX;
                    for (auto it = vec.begin(); it != vec.end()-1; it++)
                    {
                        if (min_data > *(it + 1) - *it)
                            min_data = *(it + 1) - *it;
                    }
                    for (auto it = vec.begin(); it != vec.end() - 1; it++)
                    {
                        if (min_data == *(it + 1) - *it)
                            min++;
                    }
                }
    
                //计算最大差个数,用最大值个数*最小值个数
                int m1 = 1, m2 = 1;
                for (auto it = vec.begin(); it != vec.end() - 1; it++)
                {
                    if (*it != *(it + 1))
                        break;
                    m1++;
                }
                for (auto it = vec.rbegin(); it != vec.rend() - 1; it++)
                {
                    if (*it != *(it + 1))
                        break;
                    m2++;
                }
    
                max = m1*m2;
            }
        }
    
        cout << min << " " << max;
    }
    int main()
    {
        int num;
        while (cin >> num)
        {
            vector<int> vec(num);
            int temp;
            for (int i = 0; i < num; i++)
            {
                cin >> temp;
                vec.push_back(temp);
            }
            process(vec, num);
            cout << endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    js---查找数组中的最大值(最小值),及相应的下标
    JS数组遍历的几种方法
    在 forEach 中使用 async/await 遇到的问题
    js 事件冒泡和事件捕获
    JS中dom0级事件和dom2级事件的区别介绍
    Vue集成Ueditor
    vue富文本编辑器 Vue-Quill-Editor
    Redis问题1---redis满了怎么办
    jQuery火箭图标返回顶部代码
    遇到的小问题
  • 原文地址:https://www.cnblogs.com/573177885qq/p/5850055.html
Copyright © 2011-2022 走看看