2018京东笔试
2017-09-10 21:33
483 查看
第一题是老题了 数学大佬应该一眼就看出来了 可以O(1).
点击这里
第二题
我没想出什么好的算法,就直接用暴力破解,
思路:把每一位的数取出来放在数组并且将每一位相加的sum,如果sum是奇数就不是神奇数,sum是偶数就先排序然后暴力凑sum的一半。
这样的时间复杂度太高我去查了一下,在leetcode上的题目,发现别人写的代码再看了看自己写的代码,简直没法比较。大概这就是大佬吧。可以转化为背包问题,时间复杂度为O(1)
点击这里
#include <iostream> #include <cmath> #include <string> using namespace std; int main() { string temp; cin >> temp; long long val = std::stoll(temp); long long n = ( 1 + sqrt(1 + 8*val) )/2; cout << n << endl; return 0; }
第二题
我没想出什么好的算法,就直接用暴力破解,
思路:把每一位的数取出来放在数组并且将每一位相加的sum,如果sum是奇数就不是神奇数,sum是偶数就先排序然后暴力凑sum的一半。
#include <iostream> #include <vector> #include <algorithm> using namespace std; bool qiujie(vector<int>& v, int s, int half) { if (half == 0) return true; if (half < 0) return false; for (int i = s; i < v.size(); ++i) { if (half - v[i] < 0) return false; if (qiujie(v, i + 1, half - v[i])) return true; } r 4000 eturn false; } bool countNum(long int n) { vector<int> v; int sum = 0; int half; while (n) { sum += n % 10; v.push_back(n % 10); n /= 10; } if (sum % 2 || v.size() < 2) return false; half = sum / 2; sort(v.begin(), v.end()); for (int i = 0; i < v.size(); ++i) { if (qiujie(v, i + 1, half - v[i])) return true; } return false; } int main() { long int l, r; while (cin >> l >> r) { int count = 0; for (long int i = l; i <= r; ++i) { if (countNum(i)) ++count; } cout << count << endl; } return 0; }
这样的时间复杂度太高我去查了一下,在leetcode上的题目,发现别人写的代码再看了看自己写的代码,简直没法比较。大概这就是大佬吧。可以转化为背包问题,时间复杂度为O(1)
相关文章推荐
- 2018京东校招Java笔试题
- 京东2018在线笔试题 第一个编程大题
- 【2018校招笔试-京东=java开发】题目2 求幂
- 2018京东校招笔试题-数据分析岗
- 京东2018校招在线笔试编程题①
- 2018京东笔试 疯狂序列 神奇数
- 京东2018校招Web前端工程师笔试有感
- 2017阿里,百度,京东java面试+笔试大合集,2018的你会吗?
- 编程题(1):笔试题-京东软件测试2018实习招聘
- 【2018校招笔试-京东=java开发】题目1括号匹配方案
- 京东2018实习笔试题——站队
- 2018 京东笔试疯狂序列
- 编程题(2):京东-笔试题-2018实习招聘
- 2018京东前端笔试题笔试题
- 编程题(3):京东-笔试题-2018实习招聘
- 京东2018秋招前端笔试编程题
- 2018网易笔试编程题----重排数列
- 2018广东公考笔试成绩
- 京东笔试题总结
- 京东2016笔实习生在线笔试题