拼多多笔试

第一道:100%

s = input()
count = 0

stack = []
for c in s:
    if not stack:
        stack.append(c)
        continue

    if c == stack[-1]:
        del stack[-1]
        count += 1
    else:
        stack.append(c)

print(count)

第二道:40%,直接print(0)的话,70%

n, k = list(map(int, input().split()))
x = list(map(int, input().split()))

ans = x[0]

for i in x[1:]:
    if ans + i < n:
        print(0)
        break

    ans = ans + i - n

print(ans)

第三道:没时间做了

第四道:100%

def main():
    m, n = list(map(int, input().split()))
    h = list(map(int, input().split()))

    hash = {}
    for i in h:
        if i not in hash:
            hash[i] = 1
        else:
            hash[i] += 1

    tmp = list(hash.keys())
    tmp.sort(reverse=True)

    ans = 4000 * 4000
    cur_m = m
    for i in range(len(tmp)):
        if hash[tmp[i]] >= n:
            print(0)
            return

        cur_m -= hash[tmp[i]]
        if n - hash[tmp[i]] > cur_m:
            break

        count = n - hash[tmp[i]]
        temp = 0
        for j in range(i + 1, len(tmp)):
            if count > hash[tmp[j]]:
                count -= hash[tmp[j]]
                temp += (tmp[i] - tmp[j]) * hash[tmp[j]]
            else:
                temp += (tmp[i] - tmp[j]) * count
                break

        ans = min(ans, temp)

    print(ans)

main()
#拼多多##笔试题目#
全部评论
四题都ac了 代码如下 package demo; import java.util.ArrayList; import java.util.Deque; import java.util.HashMap; import java.util.Queue; import java.util.Scanner; import java.util.Stack; public class Main {               void fun1() {         Scanner scan=new Scanner(System.in);         String str=scan.next();         int s=0;         Stack<Character>st=new Stack<Character>();         for(int i=0;i<str.length();i++) {             Character ch=str.charAt(i);             if(!st.empty()&&st.peek().equals(ch)) {                 st.pop();                 s++;             }else {                 st.add(ch);             }         }         System.out.println(s);     }          void fun2() {         Scanner scan=new Scanner(System.in);         long m;         int n;                  m=scan.nextLong();         n=scan.nextInt();         long s=m;         for(int i=0;i<n;i++) {             long x=scan.nextInt();             x=m-x;             s=s-x;         }                  if(s<=0) {             s=0;         }         System.out.println(s);     }          void fun3() {         Scanner scan=new Scanner(System.in);         int n,k;         int []arr=new int[20000];         n=scan.nextInt();         k=scan.nextInt();         HashMap<Integer, Integer>map=new HashMap<Integer, Integer>();         for(int i=0;i<n;i++) {             int x=scan.nextInt();             int y=scan.nextInt();             x=x*2;             y=y*2;             for(int j=x;j<=y;j++)                 arr[j]+=1;         }                  int t1=0,t2=0;         ArrayList<Integer>arr1=new ArrayList<Integer>();         ArrayList<Integer>arr2=new ArrayList<Integer>();         for(int i=0;i<20000;i++)         {             if(arr[i]>=k) {                 //System.out.println(i);                 arr[i]=k;                 if(i==0||arr[i-1]!=k) {                     t1=i;                 }             }             else if(i>0&&arr[i-1]==k) {                 t2=i-1;                 arr1.add(t1);                 arr2.add(t2);             }         }                  System.out.println(arr1.size());         for(int i=0;i<arr1.size();i++) {             System.out.println(arr1.get(i)/2+" "+arr2.get(i)/2);         }     }          void fun4() {         Scanner scan=new Scanner(System.in);         int m=scan.nextInt();         int n=scan.nextInt();         ArrayList<Integer> arr=new ArrayList<Integer>();         for(int i=0;i<m;i++) {             int x=scan.nextInt();             arr.add(x);         }         arr.sort(null);                           long s=0;         long min=arr.get(m-1)*n;         for(int i=0;i<=m-n;i++)cf         {             long max=arr.get(i+n-1);             if(i==0) {                 for(int j=i;j<i+n;j++) {                     s+=arr.get(j);                 }             }else {                 s=s-arr.get(i-1)+arr.get(i+n-1);                              }             //System.out.println("max="+max+"s="+s);             long x=max*n-s;             if(x<min) {                 min=x;             }         }                  System.out.println(min);     }          public static void main(String[] args) {         // TODO Auto-generated method stub                  Main demo=new Main();         demo.fun4();              } }
点赞 回复 分享
发布于 2019-05-06 21:31
求第二 、三道ak解法
点赞 回复 分享
发布于 2019-05-06 21:05
第三道,90% #include <iostream> #include <cstdio> #include <cstring> #include <cctype> #include <vector> #include <string> #include <map> #include <set> #include <cmath> #include <iterator> #include <algorithm> #include <functional> using namespace std; const int MAXN = 20005; struct segment {     int left, right;     int mx, mark; }; int n, k; vector<double> a, v_left, v_right; segment tree[MAXN << 2]; void push_up(int rt) {     tree[rt].mx = max(tree[rt << 1].mx, tree[rt << 1 | 1].mx); } void push_down(int rt) {     if (tree[rt].mark) {         tree[rt << 1].mx += tree[rt].mark;         tree[rt << 1 | 1].mx += tree[rt].mark;         tree[rt << 1].mark += tree[rt].mark;         tree[rt << 1 | 1].mark += tree[rt].mark;         tree[rt].mark = 0;     } } void build(int l, int r, int rt) {     tree[rt].left = l;     tree[rt].right = r;     tree[rt].mark = 0;     if (l == r)         tree[rt].mx = 0;     else {         int mid = (l + r) >> 1;         build(l, mid, rt << 1);         build(mid + 1, r, rt << 1 | 1);         push_up(rt);     } } void modify(int l, int r, int rt) {     if (l <= tree[rt].left && tree[rt].right <= r) {         tree[rt].mx += 1;         tree[rt].mark += 1;         return;     }     push_down(rt);     int mid = (tree[rt].left + tree[rt].right) >> 1;     if (l <= mid) modify(l, r, rt << 1);     if (r >= mid + 1) modify(l, r, rt << 1 | 1);     push_up(rt); } int query(int l, int r, int rt) {     if (l <= tree[rt].left && tree[rt].right <= r)         return tree[rt].mx;     push_down(rt);     int ans = 0, mid = (tree[rt].left + tree[rt].right) >> 1;     if (l <= mid) ans = max(ans, query(l, r, rt << 1));     if (r >= mid + 1) ans = max(ans, query(l, r, rt << 1 | 1));     return ans; } int main() {     // freopen("in.txt", "r", stdin);     cin >> n >> k;     for (int i = 0; i < n; i++) {         double l, r;         cin >> l >> r;         v_left.push_back(l);         v_right.push_back(r);         a.push_back(l);         a.push_back(r);     }     sort(a.begin(), a.end());     a.erase(unique(a.begin(), a.end()), a.end());     build(1, a.size(), 1);     for (int i = 0; i < n; i++) {         int l = lower_bound(a.begin(), a.end(), v_left[i]) - a.begin() + 1;         int r = lower_bound(a.begin(), a.end(), v_right[i]) - a.begin() + 1;         modify(l, r - 1, 1);     }     int left = 0, right = 0;     vector<pair<double, double>> ans;     for (int i = 1; i <= (int)a.size(); i++) {         int q = query(i, i, 1);         if (q >= k) {             if (left == 0)                 left = i, right = i;             else                 right = i;         }         else {             if (left != 0) {                 ans.push_back(make_pair(a[left - 1], a[right]));                 left = 0;             }         }     }     cout << ans.size() << endl;     for (auto p: ans)         cout << p.first << " " << p.second << endl;     return 0; }
点赞 回复 分享
发布于 2019-05-06 21:09
你们笔试的是什么岗位? 4道编程题
点赞 回复 分享
发布于 2019-05-07 14:33
求问楼主,你还记得第二题题干是啥吗?
点赞 回复 分享
发布于 2019-05-16 00:27
能问下面试的是什么岗位吗?以及是实习吗?
点赞 回复 分享
发布于 2019-05-17 00:18

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
19
分享

创作者周榜

更多
牛客网
牛客企业服务