楼主: fish444555
跳转到指定楼层
上一主题 下一主题
收起左侧

Akuna Capital OA

🔗
chris-sun 2016-9-3 03:07:24 | 只看该作者
全局:
第四题用backtrack 写了一下 感觉 复杂度很高啊, 也不知道对不对, 感觉应该会有DP的解法
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;

  4. int getSum(vector<int>& A) {
  5.         int res = 0;
  6.         for(const auto& n : A)
  7.                 res += n;
  8.         return res;
  9. }

  10. void dfs(vector<int>& A, vector<int>& res, vector<int>& cur, int start, int skipCount){
  11.         if(start == A.size() || skipCount < 0){
  12.                
  13.                 if (cur.size() == res.size()){
  14.                         if (getSum(res) < getSum(cur)) {
  15.                                 res = cur;
  16.                         }
  17.                 }else if(cur.size() > res.size()){
  18.                         res = cur;
  19.                 }
  20.                 return;
  21.         }
  22.         if (cur.empty() || A[start] > cur.back()) {
  23.                 cur.push_back(A[start]);
  24.                 dfs(A, res, cur, start+1, skipCount);
  25.                 cur.pop_back();
  26.                 dfs(A, res, cur, start+1, skipCount-1);
  27.         }else{
  28.                 dfs(A, res, cur, start+1, skipCount-1);
  29.         }
  30. }

  31. vector<int> subrange(vector<int>& A, int m){
  32.         vector<int> res;
  33.         vector<int> cur;
  34.         dfs(A, res, cur, 0, m);
  35.         return res;
  36. }

  37. int main() {
  38.         vector<int> test0 = {1,2,3,1,5,7,0};
  39.         vector<int> res;
  40.         res = subrange(test0, 3);
  41.         for(auto& n : res){
  42.                 cout << n <<" ";
  43.         }       
  44. }
复制代码
回复

使用道具 举报

🔗
aangel 2016-9-3 04:00:50 | 只看该作者
全局:
多谢LZ分享,OA不能用java啊?坑爹啊
回复

使用道具 举报

🔗
 楼主| fish444555 2016-9-3 09:24:57 | 只看该作者
全局:
lookbackinanger 发表于 2016-9-3 01:28
请问下第四题是一定要skip恰好是m个数么? 还是可以skip up to m个数?

我觉得是最多skip m 个,因为是找最长串,但是我做OA时候没时间测试,而且没有记录题目的测试例子,所以不一定正确
回复

使用道具 举报

🔗
zyoppy008 2016-9-14 07:33:07 | 只看该作者
全局:
fish444555 发表于 2016-8-23 06:36
不确定是否正确,只测试了简单的例子

int[] nums1 = { 8, 9, 10, 1, 2, 3, 4};

你这样discard是不对吧。
他说discard应该是最多discard多少张,来让你找到最长的subsequence。就是说你要的sequence里面除了discard其他是连续的。 但是你没必要从头开始找。 也就是说你两头的不算discard
比如  7 6 5 7 19 23 2 43 48 12 11  discard 2  那应该是 5 7 19 123 43 48 中间的2 被discard了。 这样返回最长的subsequence。
如果按你这样 那可以直接找最长subsequence就好了。 然后算他是不是长度于原数组长度小于discard的个数。那就没意义了吧。
回复

使用道具 举报

🔗
 楼主| fish444555 2016-9-14 08:05:55 | 只看该作者
全局:
zyoppy008 发表于 2016-9-14 07:33
你这样discard是不对吧。
他说discard应该是最多discard多少张,来让你找到最长的subsequence。就是说你 ...

感谢回复,确实因为我做OA的时候来不及测试,所以也不太清楚自己的答案是否正确,还是题未刷够.........
回复

使用道具 举报

🔗
zyoppy008 2016-9-14 08:17:54 | 只看该作者
全局:
chris-sun 发表于 2016-9-3 03:07
第四题用backtrack 写了一下 感觉 复杂度很高啊, 也不知道对不对, 感觉应该会有DP的解法

你有没有考虑这种情况
40 50 500 700 1 2 3 4 5 6 7 8 9   discard 2
应该是从1 到 9 不discrad的。。。
而不是从头开始算。。。因为是subsequence 处于中间影响的可以被discard 刚开始不再开头选的话就是不算discard
这样的话 只需要把你写的算法 for 循环给每一个index 搞一遍就行 获取该index开始的最长sequence。
然后如果剩余元素小于这个sequence 循环就提前结束。
但是这样感觉复杂度很高啊。
回复

使用道具 举报

🔗
 楼主| fish444555 2016-9-14 08:51:26 | 只看该作者
全局:
zyoppy008 发表于 2016-9-14 08:17
你有没有考虑这种情况
40 50 500 700 1 2 3 4 5 6 7 8 9   discard 2
应该是从1 到 9 不discrad的。。 ...

说实话,我不太清楚题目的意思,如果按照你的输入,而且discard = 2的话,就感觉最多只能 discard 2 个数。按照我之前的想法,感觉不能构成单调递增序列,所以输出空, 我对比过41楼的代码,他使用你的输入,输出为 [40 50 500 700 ], 主要没有记录官方的测试例子,我也不确定真的题目的意图
回复

使用道具 举报

🔗
aangel 2016-9-14 11:37:03 | 只看该作者
全局:
fish444555 发表于 2016-8-22 08:59
我应该是投这个,基本是点进去那题才能看到用什么语言,大部分题都是 c++ & python 3, 我看到有一道题还 ...

问下楼主每一题都要用python 3写吗?
用python 2行不行
回复

使用道具 举报

🔗
zyoppy008 2016-9-14 14:33:21 | 只看该作者
全局:
fish444555 发表于 2016-9-14 08:51
说实话,我不太清楚题目的意思,如果按照你的输入,而且discard = 2的话,就感觉最多只能 discard 2 个数 ...

如果是我说的意思,那就很难做出高效的方法。
不过我觉得应该是这样的。。
不然直接求最长递增数列就行了。因为最长的递增数列 那他的剩余的数肯定最少 所以要么是他要么为空 那这个题不就是leetcode 原题  最后加一个判断条件嘛。。那啥dfs都没必要了。。
但是那样这个题就没啥意义了感觉。。
回复

使用道具 举报

🔗
 楼主| fish444555 2016-9-14 21:41:55 | 只看该作者
全局:
aangel 发表于 2016-9-14 11:37
问下楼主每一题都要用python 3写吗?
用python 2行不行

我看过几题(没有全部看)的语言选择,基本都有c++ & python 3, 只有1题可以用 python 2
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表