阿里笔试(0314算法岗)




时长:90分钟
总共6道单选+6道多选+3道编程

第一题:

比较简单,数据范围是1000,那么直接二层for循环模拟即可
#include<stdio.h>
int main()
{

    int a, b, c, d, m;
    scanf("%d %d %d %d %d", &a, &b, &c, &d, &m);
    int ans = 0, x, y;
    for (x = a; x <= b; x++)
        for (y = c; y <= d; y++)
            if (ans < (x * y) % m)
                ans = (x * y) % m;
    printf("%d\n", ans);
    return 0;
}


交换字符


这个题目出的很好,很多边界条件,组合数学
当交换2个相同的字符时,不会产生不同的字符串,因此我们可以用"所有交换的方案数" - "s 维持不变方案数"来得到答案
还要注意特判存在2个字母相同的情况,可以得到原串

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main() {
    string s; cin >> s;
    ll n = s.size(); 
    map<char, ll> M; for (auto ch: s) M[ch]++;
    ll tot = n*(n-1)/2;
    for (auto [k,v]: M) tot -= v*(v-1)/2;

    //存在2个相同的字母
    for (auto [k,v]: M) if (v >= 2) {
        tot++;
        break;
    }
    cout << tot << endl;
    
}



第三题:切割

第三题很难很难,最后才做出来:
做 2 次 dp
第一次 dp,求每个数模 k 等于 x,最少需要切割多少次 ;O(400x400x18)x 400` 个数
第二次 dp,用第一次dp 的结果,求前 i 个数模 k 等于 x,最少需要切割多少次,复杂度 O(400*400*400)

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

vector<int> gao(ll n, int k) {
  string s = to_string(n);
  vector<vector<int>> dp(s.size()+1, vector<int>(k, 0x3f3f3f3f));
  dp[0][0] = 0;
  for (int i = 0; i < s.size(); i++) {
    int cur = 0;
    for (int j = i; j < s.size(); j++) {
      cur = (cur * 10 + s[j]-'0')%k;
      for (int x = 0; x < k; x++) {
        dp[j+1][(cur+x)%k] = min(dp[j+1][(cur+x)%k] , dp[i][x]+(i!=0));
      }
    }
  }
  return dp.back();
}

int main() {
  int n, k; cin >> n >> k;
  vector<ll> A(n); for (auto &x: A) cin >> x;
  vector<int> cur(k, 0x3f3f3f3f);
  cur[0] = 0;
  for (auto &t: A) {
    vector<int> nxt(k, 0x3f3f3f3f);
    vector<int> tmp = gao(t, k);
    for (int i = 0; i < k; i++) {
      for (int j = 0; j < k; j++) nxt[(i+j)%k] = min(nxt[(i+j)%k], cur[i]+tmp[j]); 
    }
    cur = nxt;
  }
  cout << cur[0] << endl;
}



#阿里笔试##阿里巴巴##笔经#
全部评论
什么叫做Pypy提交呀。。。?
3
送花
回复
分享
发布于 2022-03-15 21:52
第三题80是啥原因🤣
2
送花
回复
分享
发布于 2022-03-15 22:24
滴滴
校招火热招聘中
官网直投
来启元世界试试嘛,游戏ai的top公司,1075不加班+大厂ssp薪资水平,算法和开发都有大量hc,春招和实习都欢迎哦。我秋招放弃了微软字节百度等大厂offer,因为他们给的实在是太多啦,而且是强化学习领域技术实力非常强的公司,腾讯网易互跳。
2
送花
回复
分享
发布于 2022-03-19 03:47
笑死,第三题数据其实最多分割两次 ,直接做第二个dp就能过
1
送花
回复
分享
发布于 2022-03-14 22:47
第二题的特判指的是啥啊
1
送花
回复
分享
发布于 2022-03-15 17:01
请教一下,第二题为啥要最后再遍历一遍 重复>=2的情况?难道不是在前面按排列组合公式减去所有有重复字母的情况就行了吗?再遍历一遍全都加一是啥意思?
1
送花
回复
分享
发布于 2022-04-05 11:35
阿里的研发和算法笔试算法题不一样吗
1
送花
回复
分享
发布于 2022-04-06 18:44
选择题是什么鬼啊
1
送花
回复
分享
发布于 2022-04-06 22:01
第二题不知道为什么只a了96😂
点赞
送花
回复
分享
发布于 2022-03-14 21:19
请问怎么保存题目呢,是截图吗,会判定作弊吗
点赞
送花
回复
分享
发布于 2022-03-14 21:54
 22届的留学生回国不知道怎么看机会?想来华为体验一下?没问题,有机会!  华为消费者BG AI与智慧全场景业务部正在招聘中!做鸿蒙,还得看我们!offer快快滴!  岗位面向2021年1月1日-2022年12月31日期间毕业于海外高校的留学生,软件开发工程师、AI工程师、测试工程师赶紧冲就完事了!  感兴趣的同学直接回帖召唤我,也可以将简历直接发送至HR小姐姐的邮箱:wangyuan135@huawei.com,华为期待你的加入!
点赞
送花
回复
分享
发布于 2022-03-18 09:44
想请教一下选择部分大致考察什么范围呢
点赞
送花
回复
分享
发布于 2022-03-23 14:46
第一题这样居然不会超时吗
点赞
送花
回复
分享
发布于 2022-04-15 10:42

相关推荐

44 231 评论
分享
牛客网
牛客企业服务