10.15 滴滴笔试

1、能够同时操作的最大个数;思路:排序后暴力 100%;本来想优化的,结果直接过了haha;

#include <bits/stdc++.h>
using namespace std;

int main(){
  int n, k;
  cin >> n >> k;
  vector<int> nums(n);
  for(int i=0; i< n; i++){
    cin >> nums[i];
  }
  sort(nums.begin(), nums.end());
  int ret = 0;
  for(int i=0; i< n-ret; i++){
    int j = i;
    while(j< n&& nums[j]-nums[i]<= k) j += 1;
    ret = max(ret, j-i);
  }
  cout << ret;
  return 0;
}

2、安排不同的路线总数;思路:先按照区间开始和末尾排序,然后计算从当前开始到末尾有重合的个数,然后选取就好了;100%

#include <bits/stdc++.h>
using namespace std;
int main(){
  int n;
  cin >> n;
  vector<pair<int, int>> plans(n);
  unordered_map<int, int> has_inter;
  for(int i=0; i< n; i++){
    cin >> plans[i].first;
  }
  for(int i=0; i< n; i++){
    cin >> plans[i].second;
  }
  sort(plans.begin(), plans.end());
  for(int i=0; i< n; i++){
    int left =i+1, right = n-1;
    while(left<= right){
      int mid = (left+right)/2;
      if(plans[mid].first<= plans[i].second)
        left = mid+1;
      else
        right = mid-1;
    }
    has_inter[i] = left-i-1;
  }
  
  vector<int> post(n, 0);
  for(int i=n-1; i>= 0; i--){
    post[i] = (n-i-1) - has_inter[i];
    if(i != n-1)
      post[i] += post[i+1];
  }
  
  long ret = 0;
  for(int i=0; i< n; i++){
    int j=i+1;
    while(j< n&& plans[j].first<= plans[i].second)
      j += 1;
    if(j< n)
      ret += post[j];
  }
  cout << ret;
  return 0;
}

美团、百度、小米等大厂都AK了,到现在都没有面试,大厂的笔试做着玩玩就好了;

#10.15滴滴笔试#
全部评论
感谢楼主分享的笔试题
点赞 回复 分享
发布于 2022-10-23 11:29 陕西

相关推荐

职场水母:你确定你不是在反串?另外这里是牛客,
点赞 评论 收藏
分享
2024-12-27 13:08
华南理工大学 Java
蝴蝶飞出了潜水钟丿:多看一眼就会💥
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
5
分享
牛客网
牛客企业服务