网易编程题

第一道题直接顺序搜索找最长的串,不知道为什么一直超时 40通过
第二道题应该用deque直接解决的啊,我怎么头脑发热去暴力求解,好蠢啊,被自己蠢哭了 40通过
第三道题贪心算法 100通过
#网易#
全部评论
// // Created by yudw on 2017/8/12. // #include <iostream> #include <vector> #include <algorithm> using namespace std; /* 1.操作序列:原始序列跟第n次反转后的序列是有规律的 */ int main() {     int n;     while(cin>>n)     {         vector<int> vec_nums(n);         for(int i=0; i<n; ++i)         {             cin>>vec_nums[i];         }         bool flag = n % 2 == 0; // n是否为偶数         vector<int> vec_item(n);         int half = n/2;         if(flag)         {             for(int i=0, k=0; i<n &&half + k < n && half - k - 1 >= 0; ++k, i += 2)             {                 vec_item[half + k] = vec_nums[i];                 vec_item[half - k - 1] = vec_nums[i+1];             }         }         else         {             vec_item[half] = vec_nums[0];             for(int i=1, k=0; i<n &&half + k < n && half - k - 1 >= 0; ++k, i += 2)             {                 vec_item[half + k + 1] = vec_nums[i];                 vec_item[half - k - 1] = vec_nums[i+1];             }         }         for(int i=0; i<vec_item.size()-1; ++i)         {             cout<<vec_item[i]<<' ';         }         cout<<vec_item.back();     }     return 0; }
点赞 回复 分享
发布于 2017-08-12 20:31
// // Created by yudw on 2017/8/12. // #include <iostream> #include <vector> #include <algorithm> using namespace std; /* 2. 独立的小易  要注意小易的水果有初值 */ int main() {     int x, f, d, p; // 房租, 已有水果,d元钱, p元每个     while (cin>>x>>f>>d>>p)     {         int days = 0;         int day_cost = x + p;         if (f >0 && d > x)         {             if(d/x >= f)    // 有更多的钱             {                 days += f;                                  d -= x*f;                 f = 0;             }             else if(d/x < f)    // 钱不够             {                 days += d/x;                 d -= x*days;                 f -= days;             }         }         if(d < x )   //没钱了         {             cout<<days;         }         else if(d >= x ) // 还有钱, 水果已经吃完了         {             days += d / day_cost;             cout<<days<<endl;         }     }     return 0; }
点赞 回复 分享
发布于 2017-08-12 20:28
// // Created by yudw on 2017/8/12. // #include <iostream> #include <algorithm> #include <deque> using namespace std; /* 3.疯狂队列,贪心方法,每一次将最大的疯狂值的序列加入 */ int main() {     int n;     while (cin>>n)     {         vector<int> vec_h(n);         for (size_t i=0; i<n; ++i)         {             cin>>vec_h[i];         }         sort(vec_h.begin(), vec_h.end());         deque<int> deque_crazy;         deque_crazy.push_back(vec_h[0]);         for (int i = 1, j = n-1; deque_crazy.size() != n; )         {             int head = deque_crazy.front();             int tail = deque_crazy.back();             int crazy1 = abs(head - vec_h[i]);             int crazy2 = abs(head - vec_h[j]);             int crazy3 = abs(tail -vec_h[i]);             int crazy4 = abs(tail - vec_h[j]);             if(max(crazy1, max(crazy2, max(crazy3, crazy4))) == crazy1)             {                 deque_crazy.push_front(vec_h[i]);                 ++i;             } else if(max(crazy1, max(crazy2, max(crazy3, crazy4))) == crazy2)             {                 deque_crazy.push_front(vec_h[j]);                 --j;             }else if(max(crazy1, max(crazy2, max(crazy3, crazy4))) == crazy3)             {                 deque_crazy.push_back(vec_h[i]);                 ++i;             } else             {                 deque_crazy.push_back(vec_h[j]);                 --j;             }         }         int ans =0;         for(size_t i=1; i<n; ++i)         {             ans += abs(deque_crazy[i] - deque_crazy[i-1]);         }         cout<<ans<<endl;     }     return 0; }
点赞 回复 分享
发布于 2017-08-12 20:23
import java.util.Deque; import java.util.LinkedList; import java.util.Scanner; public class Main {     public static void main(String[] args){         Scanner s = new Scanner(System.in);         while(s.hasNext()){             int a = Integer.parseInt(s.nextLine());             int[] da = new int[a];             String[] data = s.nextLine().split("\\s");             for(int i = 0; i < data.length; i++){                 da[i] = Integer.parseInt(data[i]);             }             Deque<Integer> q = new LinkedList<Integer>();             for(int i = 0; i < da.length; i++){                 if(i %2 != 0){                     q.addFirst(da[i]);                 }else{                     q.addLast(da[i]);                 }             }             for(int i = 0; i<a;i++){                 da[i] = q.remove();             }             if( a%2 ==0){                 for(int i = 0; i<da.length-1;i++){                     System.out.print(da[i]+" ");                 }                 System.out.println(da[da.length-1]);             }else{                 for(int i = da.length-1; i>0;i--){                     System.out.print(da[i]+" ");                 }                 System.out.println(da[0]);             }         }                  } }
点赞 回复 分享
发布于 2017-08-12 17:18
我也是C++岗位。 第一道是交错01串?我用三个指针遍历一遍01串,ac了; 第二道,我***了,脑袋抽了,直接暴力,用reverse(),每次都反转数组,结果case通过率50%,提示超时; 第三道,没想出来,求教。。。 跪了跪了
点赞 回复 分享
发布于 2017-08-12 17:15
老哥第三题题目是疯狂身高队列那个题吗?
点赞 回复 分享
发布于 2017-08-12 17:11
题目原来不一样啊。请问楼主什么岗
点赞 回复 分享
发布于 2017-08-12 17:09

相关推荐

mjasjon:这种trash中厂 简历过筛概率比大厂还低(除阿里系)
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务