2023 小米笔试题 0902

笔试时间:2023年9月2日 秋招

第一题

题目:手机流畅运行的秘密

8月份发布会一结束,米小兔就在公司领到了一台最新发布的Xiaomi MIX Fold 3手机,这是一款小米旗舰折叠屏手机,并搭载了全新升级架构的MIU114系统。其先进的应用引擎不仅让系统更流畅,应用体验也大幅提升。在一个优化项中,为了尽可能提升用户白天使用手机的体验和续航,某些已经在系统中注册过的任务会被设置为空闲任务,仅在手机空闲时运行 (比如数据备份或AI相册整理)。现在系统中注册了若干组空闲任务,每个任务有各自的耗电量以及允许任务运行的最低初始电量,我们需要计算手机能够串行完成全部任务的最低初始电量。

注意点1: 所有电量以mAh(毫安时)计,Xiaomi MIX Fold 3的大电池容量是4800mAh。

注意点2:本题目假设手机在运行空闲任务期间,不处于充电状态,也没有额外耗电行为。

注意点3:智能应用引擎会以最合适的顺序串行运行任务。

输入描述

一个描述了所有任务的长字符串。任务与任务之间用逗号阳开,每组任务由耗电量及最低初始电量组成,用冒号限开。

输出描述

一个数字,代表依次完成全部任务的最低初始电量,如果最低初始电量超过手机电池容量,则返回-1。

样例输入

1:10,2:12,3:10

样例输出

13

提示:在样例中,手机至少需要有13mah的初始电量,在运行任务2后剩余电量11mAh、运行任务1后剩余电量10mah、运行任务3后剩余7mah。

参考题解

二分查找

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
using ll = long long;

int main () {
    string input; cin >> input;
    int n = input.size();
    vector<vector<ll>> intervals;

    for (int i = 0; i < n; ++i) {
        int j = i;
        while (j < n && input[j] != ',') ++j;
        string intervalStr = input.substr(i, j - i);
        int colonPos = intervalStr.find(':');
        intervals.push_back({stoll(intervalStr.substr(0, colonPos)), stoll(intervalStr.substr(colonPos + 1))});
        i = j;
    }

    sort(intervals.begin(), intervals.end(), [](vector<ll>& a, vector<ll>& b){
        // Choosing 'a' first
        ll timeWithA = a[1] + max(0LL, b[1] - a[1] + a[0]);
        // Choosing 'b' first
        ll timeWithB = b[1] + max(0LL, a[1] - b[1] + b[0]);
        return timeWithA < timeWithB;
    });

    int numIntervals = intervals.size();
    ll totalTime = intervals[0][1];
    ll remainingTime = intervals[0][1] - intervals[0][0];
    ll MAX_TIME = 4800;

    for (int i = 1; i < numIntervals; ++i) {
        if (remainingTime >= intervals[i][1]) {
            remainingTime -= intervals[i][0];
        } else {
            totalTime += intervals[i][1] - remainingTime;
            remainingTime = intervals[i][1] - intervals[i][0];
        }
    }

    if (totalTime > MAX_TIME) {
        cout << -1;
    } else {
        cout << totalTime;
    }
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        int n = s.length();
        List<List<Long>> a = new ArrayList<>();

        for (int i = 0; i < n; ++i) {
            int j = i;
            while (j < n && s.charAt(j) != ',') ++j;
            String ss = s.substring(i, j);
            int p = ss.indexOf(':');
            a.add(List.of(Long.parseLong(ss.substring(0, p)), Long.parseLong(ss.substring(p + 1))));
            i = j;
        }

        Collections.sort(a, (b, c) -> {
            long f1 = b.get(1) + Math.max(0L, c.get(1) - b.get(1) + b.get(0));
            long f2 = c.get(1) + Math.max(0L, b.get(1) - c.get(1) + c.get(0));
            return Long.compare(f1, f2);
        });

        int m = a.size();
        long sum = a.get(0).get(1);
        long r = a.get(0).get(1) - a.get(0).get(0);
        long MAX = 4800;

        for (int i = 1; i < m; ++i) {
            if (r >= a.get(i).get(1)) {
                r -= a.get(i).get(0

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2023 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论

相关推荐

Lorn的意义:你这种岗位在中国现在要么牛马天天加班,要么关系户进去好吃好喝,8年时间,真的天翻地覆了,对于资本来说你就说一头体力更好的牛马,哎,退伍没有包分配你真的亏了。
点赞 评论 收藏
分享
评论
1
16
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务