首页 > 代码库 > 2017腾讯实习笔试题
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;}
思路:
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 =http://www.mamicode.com/ 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 =http://www.mamicode.com/= *(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;}
2017腾讯实习笔试题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。