今天为什么没人说搜狐的笔试

rt
全部评论
第二题DP AC int main(){     int l;     long long sum = 0;     cin >> l;     vector<int> n(l);     for (int i = 0; i < l; i++){         cin >> n[i];         sum += n[i];     }     vector<int> rn = n;     reverse(rn.begin(), rn.end());     vector<long long> tmp(l + 1, 0);     vector<vector<long long>>res(2, tmp);     for (int i = 1; i <= l; i++){         for (int j = 1; j <= l; j++){             if (rn[i - 1] == n[j - 1])                 res[1][j] = max(res[0][j - 1] + rn[i - 1], res[1][j - 1]);             else                 res[1][j] = max(res[1][j - 1], res[0][j]);         }         res[0] = res[1];         res[1] = tmp;     }     cout << 2 * sum - res[0][l] << endl;     return 0; }
点赞 回复
分享
发布于 2017-09-17 20:31
编程呢
点赞 回复
分享
发布于 2017-09-17 19:40
联易融
校招火热招聘中
官网直投
有吗 搜狐的编程
点赞 回复
分享
发布于 2017-09-17 19:41
第二道编程题呢
点赞 回复
分享
发布于 2017-09-17 19:41
第一道呢,也发一下
点赞 回复
分享
发布于 2017-09-17 19:42
大佬都不做了吗
点赞 回复
分享
发布于 2017-09-17 19:42
哈哈哈哈哈哈刚考完
点赞 回复
分享
发布于 2017-09-17 20:16
第二题呢?
点赞 回复
分享
发布于 2017-09-17 20:24
第二题怎么DP啊,好难
点赞 回复
分享
发布于 2017-09-17 20:26
第二题 数组添加元素构成回文数组并使数组的和最小,输出构造好的回文数组的和, 如[1,2,3,1,2] 可添加2个元素 变为回文 [1,2,1,3,1,2,1], 输出为11。 我的代码如下 只通过30% n = int(input()) myArray = list(map(int,input().strip().split())) def mySolution(myList,n):          if list(reversed(myList)) == myList: #已经是回文数         return sum(myList)     forward = 0     backward = n-1     mySum = sum(myList)     while forward < backward:         if myList[forward] == myList[backward]:             forward += 1             backward -= 1         elif myList[forward] < myList[backward]:             mySum += myList[forward]             forward += 1         else:             mySum += myList[backward]             backward -= 1     return mySum           print(mySolution(myArray,n))
点赞 回复
分享
发布于 2017-09-17 20:29
选择题跟之前的一样啊 - -
点赞 回复
分享
发布于 2017-09-17 20:32
第二题我用记忆化搜索过了,反倒是第一题一直莫名其妙段错误?最后都没改对
点赞 回复
分享
发布于 2017-09-17 20:32
大佬帮忙看看,下面这段代码为啥老是段错误呢?本地IDE可以通过示例。 #include <iostream> #include <string> #include <stack> using namespace std; int main() {     ///a/./b/../../c/     string s;     while (cin >> s)     {         string res;         int n = s.size();         stack<string> st;         stack<string> st2;         int start = 0;         int end = 0;         int flag = 0;         while (1)         {             start = s.find_first_of('/', start);             if (start == -1)             {                 st.push(s);                 break;             }             string str;             end = s.find_first_of('/', start + 1);             str = s.substr(start + 1, end - start - 1);             start = end;             if (str == "")             {                 break;             }             if (str == "..")             {                 st.pop();             }             else if (str == ".")             {                 continue;             }             else             {                 st.push(str);             }         }         for (int i = 0; i < st.size();)         {             string top = st.top();             st.pop();             st2.push(top);         }         for (int i = 0; i < st2.size();)         {             string top = st2.top();             cout << "/" << top;             st2.pop();         }         cout << endl;     }     return 0; }
点赞 回复
分享
发布于 2017-09-17 20:33
呃呃 出了第二题编程 其余的都有原题吧
点赞 回复
分享
发布于 2017-09-17 20:36
大佬们帮看一下  20% 纯暴力 public class Demo3 {     public static void main(String[] args) {         int[] arr = { 3, 2, 4 };         System.out.println(fun(arr));     }     private static int fun(int[] arr) {         int min = Integer.MAX_VALUE;         for (int k = 0; k < arr.length; k++) {             int sum = 0;             int i = k - 1;             int j = k + 1;             while (i >= 0 && j < arr.length) {                 if (arr[i] == arr[j]) {                     j++;                     i--;                 } else if (arr[i] > arr[j]) {                     sum += arr[j++];                 } else {                     sum += arr[i--];                 }             }             if (i < 0) {                 for (int j2 = j; j2 < arr.length; j2++) {                     sum += arr[j2];                 }             }             if (j == arr.length) {                 for (int j2 = i; j2 >= 0; j2--) {                     sum += arr[j2];                 }             }             min = Math.min(min, sum);         }         for (int k = 0; k < arr.length; k++) {             min += arr[k];         }         return min;     } }
点赞 回复
分享
发布于 2017-09-17 20:39
因为做得跟****一样。
点赞 回复
分享
发布于 2017-09-17 20:40
20%,递归。超时了
点赞 回复
分享
发布于 2017-09-17 20:43
求大佬解答,一直提示输入有问题 #coding = utf-8 import sys for line in sys.stdin: str1 = line.split() n = len(str1) str1 = str1.split('/') d = [] res="" str2 = ['','.','..'] for i in str1: if i not in str2: d.append(i) n = str1.count("..") while n: d.pop() n-=1 if d==[]: print '/' else: for i in d: res+='/'+i print res
点赞 回复
分享
发布于 2017-09-17 21:03
都不是Java的?
点赞 回复
分享
发布于 2017-09-17 21:05

相关推荐

头像
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务