4.27拼多多笔试

不知道这几题有没有问题,大佬进来帮忙看看。
第二题,直接找最长的0子串。
// 最长连续子串
public class pdd2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        int basecount = 0;
        for(int i=0; i<n; i++) {
            a[i] = sc.nextInt();
            if (a[i] == 1) {
                basecount ++;
            }

        }
        System.out.println(basecount + answer(a));
    }
    public static int answer(int[] a){
        int max = Integer.MIN_VALUE;
        int current = 0;
        for(int i=0; i<a.length; i++) {
            if (a[i] == 0) {
                current++;
            } else {
                current = 0;
            }
            if (current > max) {
                max = current;
            }
        }
        return max;
    }
}

第四题,贪心做的感觉不太对。
// 冰冻青蛙
public class pdd4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int t = scanner.nextInt();
        for(int i=0; i<t; i++) {
            Integer n = scanner.nextInt();
            Long m = scanner.nextLong();
            Long k = scanner.nextLong();
            ArrayList<Long> a= new ArrayList<>();
            for(int j=0; j<n; j++) {
                a.add(scanner.nextLong());
            }
            System.out.println(answer(n,m,k,a));
        }
    }

    public static Long answer(Integer n, Long m, Long k, ArrayList<Long> a) {
        Long[] dp = new Long[n];
        int pos = 0;
        for(int i=0; i<n; i++) {
            dp[i] = a.get(i);
        }
        dp[1] = dp[1]-k;
        for(int i=2; i<=m; i++) {
            if (pos-1 < 0) {
                dp[pos+1] = dp[pos+1]-k;
                pos++;
                continue;
            }
            if (pos+1 >= n) {
                dp[pos-1] = dp[pos-1]-k;
                pos--;
                continue;
            }
            if (dp[pos+1] < dp[pos-1] ) {
                dp[pos-1] = dp[pos-1] - k;
                pos --;
            } else {
                dp[pos+1] = dp[pos+1] - k;
                pos ++;
            }
        }
        Long min = Long.MAX_VALUE;
        for (int j=0; j<n; j++) {
            if (dp[j] < min) {
                min = dp[j];
            }
        }
        return min;
    }
}


#笔试题目##拼多多#
全部评论
第二题: #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {     int N;     cin >> N;     vector<int> v(N);     int sum = 0;     for (int i = 0; i < N; i++) {         cin >> v[i];         sum += v[i];     }     int flag = -1;     if (v[0] == 0) flag = 1;     int cur = flag;     int max1 = cur;     for (int i = 1; i < N; i++) {         flag = -1;         if (v[i] == 0) flag = 1;         cur = max(flag, cur + flag);         max1 = max(max1, cur);     }     cout << sum + max1 << endl; }
1 回复
分享
发布于 2021-04-27 21:25
字节跳动内推码,蹭蹭。E6XRJFK
点赞 回复
分享
发布于 2021-04-27 21:16
英特尔
校招火热招聘中
官网直投
第四题贪心是错的
点赞 回复
分享
发布于 2021-04-27 21:18
第二题应该是dp吧
点赞 回复
分享
发布于 2021-04-27 21:20
第二题是前缀和 第四题是二分
点赞 回复
分享
发布于 2021-04-27 21:22
第一题: #include<iostream> #include<vector> #include<algorithm> using namespace std; vector<int> tentotwo(int N) {     vector<int> v_temp;     while (N > 0) {         v_temp.push_back(N % 2);         N /= 2;     }     return v_temp; } int main() {     int T;     cin >> T;     vector<int> v(T);     for (int i = 0; i < T; i++) {         cin >> v[i];     }     for (int i = 0; i < T; i++) {         if (v[i] == 1) {             cout << "1" << endl;             cout << "1" << endl;             continue;         }         vector<int> temp;         temp = tentotwo(v[i]);         reverse(temp.begin(), temp.end());         //temp.reverse();         int M = temp.size();         cout << M << endl;         cout << "1";         for (int j = 1; j < M; j++) {             if (temp[j] == 1) {                 cout << " " << j+1;             }         }         cout << endl;     }     return 0; }
点赞 回复
分享
发布于 2021-04-27 21:24
第三题就不发了,30%,写完没时间调试,,第四题没看题
点赞 回复
分享
发布于 2021-04-27 21:26
楼主第一题来个JAVA的
点赞 回复
分享
发布于 2021-04-27 21:32
第一题是考什么呢?
点赞 回复
分享
发布于 2021-04-27 21:38
第二题我一看数据最大才5000,果断两层循环解决
点赞 回复
分享
发布于 2021-04-27 22:53
好水....第三题看错题看成不多于k个一坑了我快40分钟5555,30minAK失败
点赞 回复
分享
发布于 2021-04-27 23:27
第二题是dp,直接找最长0如果出现00100这种就会错。第四题我看了数据也感觉是用贪心但没过
点赞 回复
分享
发布于 2021-04-27 23:28
你这个 dp 不对 第二题,第二题就是前缀和 0  1类型数组转换一下 dp 的话 0 0 0 1 0 0 0 这种不 行
点赞 回复
分享
发布于 2021-04-28 10:02

相关推荐

点赞 5 评论
分享
牛客网
牛客企业服务