笔试面试相关记录(10)

news2024/11/19 8:24:25

(1)马走棋盘,只能走‘日’字形,起点在(0,0),给定一个点[x,y](-300<=x,y<=300),问最少多少步可以到达?

输入:2,1

输出:1

 这个题目通过了91.76%

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 最小移动步数
     * @param x int整型 x坐标
     * @param y int整型 y坐标
     * @return int整型
     */
    vector<vector<int>> directions = {{2,1},{1,2},{-2,1},{-1,2},{-2,-1},{-1,-2},{1,-2},{2,-1}};
    
    int getMinStep(int x, int y) {
        // 先建立一个最大的棋盘
        vector<vector<int>> grid(601, vector<int>(601, -1));
        // 此时300,300是原来原点的位置,最小步数是0
        grid[300][300] = 0;
        //从300,300出发,将其他八个方向设置为1,表示一步到达,并保存坐标
        queue<vector<int>> q;
        for (int i = 0; i < 8; i++) {
            int x_ = 300+directions[i][0];
            int y_ = 300+directions[i][1];
            grid[x_][y_] = 1;
            q.push({x_, y_});
        }
        //如果目标点就是这八个点中的,直接返回1
        if (grid[300+x][300+y] != -1) return 1;
        int step = 1;
        while (q.size()) {
            //每一层对应的步数都会变大
            step++;
            //类似于层次遍历,将这一层全部都走到
            int size = q.size();
            for (int i = 0; i < size; i++) {
                vector<int> t = q.front();
                q.pop();
                for (int j = 0; j < 8; j++) {
                    int new_x = t[0] + directions[j][0];
                    int new_y = t[1] + directions[j][1];
                    if (new_x >= 0 && new_x < 601 && new_y >= 0 && new_y < 601 && grid[new_x][new_y] == -1) {
                        //如果走到了目标点了,直接返回此时的step
                        if (new_x-300 == x && new_y-300 == y) return step;
                        grid[new_x][new_y] = step;
                        q.push({new_x, new_y});
                    }
                }
            }
        }
        return step;
    }
    int minHorseSteps(int x, int y) {
        // write code here
        return getMinStep(x, y);
    }
};

(2)给定一个数组表示强盗,strength[i] = x,表示强盗i有力量x,小明起初时的力量是0,每天都会增加力量y,如果小明的力量大于等于强盗的力量,则表示小明可以战胜强盗,当小明战胜强盗后,小明的力量变成0,并且y++,如果小明没有战胜强盗,则等待下一天,小明每天会先增加y的力量,问最少多少天可以战胜全部的强盗。(下面这个通过了90%)

#include <climits>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 救出公主最少的天数
     * @param strength int整型vector 强盗的力量值数组
     * @return int整型
     */
    int minDays(vector<int>& strength) {
        // write code here
        int minDays = 0;
        int y = 1;
        int startStrength = 0;
        int n = strength.size();
        int deathCount = 0;
        vector<int> death(n, 0);
        while (deathCount < n) {
            startStrength += y;
            minDays++;
            int diff = INT_MAX, index = 0;
            bool hasVic = false;
            //寻找一个可以战胜且力量值最接近的强盗
            for (int i = 0; i < n; i++) {
                if (death[i] == 0 && startStrength >= strength[i] && (startStrength-strength[i]) < diff) {
                    diff = startStrength - strength[i];
                    hasVic = true;
                    index = i;
                }
            }
            if (hasVic) {
                death[index] = 1;
                startStrength = 0;
                y++;
                deathCount++;
            }
        }
        return minDays;
    }
};

(3)数组interviews表示各个面试者开始和结束时间,例如interviews[i] = [start, end]表示第i个面试者的开始时间为start,结束时间为end,并且每两个面试官为固定一组(这里我的理解是2个面试官一起对面试者进行面试),并且每个面试不可以中途被打断,问至少需要多少个面试官?其实就是如果对数据按照start排序之后,求同一时刻需要面试的的面试者的最大数,然后乘于2返回。

输入:[ [0,20], [10,15], [25,40] ]

输出:4

(下面的方法通过率100%)

#include <queue>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 最少需要面试官数量
     * @param interviews int整型vector<vector<>> 面试时间安排数组
     * @return int整型
     */
    //按照开始时间升序排序
    static bool cmp(vector<int>& a, vector<int>& b) {
        return a[0] <= b[0];
    }
    int minInterviewersCount(vector<vector<int> >& interviews) {
        // write code here
        sort(interviews.begin(), interviews.end(), cmp);
        // for (int i = 0; i < interviews.size(); i++) {
        //     cout << interviews[i][0] << " " << interviews[i][1] << endl;
        // }
        int n = interviews.size();
        int interviewCount = 1;
        //用一个小根堆记录此前面试者的结束时间,这个结束时间堆
        //在用来判断后面的面试者是否可以加入到之前已经面试完毕的组里面,而不用新开一个组
        priority_queue<int, vector<int>, greater<int>> q;
        q.push(interviews[0][1]);
        int end = q.top();
        //从第二个开始遍历
        for (int i = 1; i < n; i++) {
            //如果当前面试者和上一个有交集并且不能安排到别的组里面,此时新开一组
            if (interviews[i][0] < interviews[i-1][1] && interviews[i][0] < q.top()) {
                interviewCount++;
                q.push(interviews[i][1]);
            } else {
                //到这里表示不需要新开一组,则当前面试者加入到之前某个已经完成面试的组里面
                //也就是完成时间最靠前的,并且将其弹出
                q.pop();
                q.push(interviews[i][1]);
            }
        }
        return interviewCount*2;
    }
};

(4)给定一个循环字符串,从中找到相同字符最长的长度,例子如下:

输入:aabaa,输出4,表示字符串头尾相连可以得到的最长的相同字符字符串的长度

输入:aabcc,输出2,可以得到的最长的相同字符的长度为2

#include <iostream>
#include <string>

using namespace std;

int main() {
    string str;
    while (cin >> str) {
        int n = str.size();
        int max_len = 0, total_len = 2*n;
        string str1 = str + str;
        int i = 0;
        bool flag = false;
        while (i < n) {
            int j = i+1;
            int len = 1;
            while (j < total_len && str1[j] == str1[i]) {
                len++;
                j++;
            }
            //如果j跑到了最后,说明整个字符串都是同一个字符组成的,其他情况,
            //j都不可能跑到最后
            if (j == total_len) {
                flag = true;
            }
            max_len = max(max_len, len);
            i = j;
        }
        if (flag) {
            cout << max_len / 2 << endl;
        } else {
            cout << max_len << endl;
        }
    }
}

(5)描述:输入一个数字n,表示药的种类,接下来n行,每行两个数字,表示每种药的疼痛指数和功效值,再接下来输入一个数字q,表示查询次数,在接下来q行,每行一个数字表示输入的可以接受的疼痛指数,求出在不超过给定疼痛指数情况下可以获得的最大的功效,最后结果输出q行。

5
3 10
4 2
6 6
9 10
10 9
3
1
6
9

输出

-1
10
10

每个数字都很大,我的暴力解法超时了。 

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;

static bool cmp(vector<int>& a, vector<int>& b) {
    if (a[0] == b[0]) {
        return a[1] >= b[1];
    }
    return a[0] >= b[0];
}

int main() {
    int n;
    while (cin >> n) { // 注意 while 处理多个 case
        int a, b;
        vector<vector<int>> vec;
        map<int, int> mp;
        for (int i = 0; i< n; i++) {
            cin >> a >> b;
            vec.push_back({a, b});
        }
        sort(vec.begin(), vec.end(), cmp);
        // 排序之后,将后面的最大值逐个向前更新
        for (int i = n-2; i >= 0; i--) {
            if (vec[i][1] < vec[i+1][1]) {
                vec[i][1] = vec[i+1][1];
            }
        }
        int q, t;
        cin >> q;
        vector<int> ans;
        for (int i = 0; i < q; i++) {
            cin >> t;
            bool find_ = false;
            int max_ = 0;
            for (int j = 0; j < n; j++) {
                if (vec[j][0] <= t) {
                    max_ = vec[j][1];
                    find_ = true;
                    break;
                }
            }
            if (!find_) {
                ans.push_back(-1);
            } else {
                ans.push_back(max_);
            }
        }
        for (int i = 0; i < q; i++) {
            cout << ans[i] << endl;
        }
    }
}
// 64 位输出请用 printf("%lld")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1095209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解RNN

[人工智能-深度学习-47]&#xff1a;卷积神经网CNN循环神经网络RNN与组合电路时序电路的比较 [人工智能-深度学习-51]&#xff1a;循环神经网络 - RNN基本原理详解 组合逻辑电路 组合逻辑电路在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入&#xff0c;与电路原来…

IOday6

主线程和分支线程都可以访问&#xff0c;虚拟地址和物理地址都相同 分支线程不可以访问&#xff0c;使用pthread_create函数的第四个参数传址 不能访问,传递地址过去

大模型分布式训练并行技术(六)-多维混合并行

近年来&#xff0c;随着Transformer、MOE架构的提出&#xff0c;使得深度学习模型轻松突破上万亿规模参数&#xff0c;传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此&#xff0c;我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&am…

python练习:赋值运算 => 输入身高,体重,求BMI = 体重(kg)/身高(m)的平方。

赋值运算 > 输入身高&#xff0c;体重&#xff0c;求BMI 体重(kg)/身高(m)的平方。 代码&#xff1a; height float(input(‘请输入您的身高&#xff08;m&#xff09;&#xff1a;’)) weight float(input(‘请输入您的体重&#xff08;kg&#xff09;&#xff1a;’))…

【完美世界】云曦篇开播时间定档,推迟两周,石昊新形态帅翻,怒斩战王

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 完美世界动画更新最新资讯&#xff0c;石昊在血色平原与云曦重逢并英雄救美。 官方公布了云曦特别篇的先导预告&#xff0c;播出时间推迟了两周。 石昊在特别篇中出现了新形态&#xff0c;以雷帝甲胄为主&…

【C++】:引用的概念/引用的特性/常引用/引用的使用场景/传值与传引用的效率比较/引用和指针的区别/内联函数的概念/内联函数的特性

引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间 比如&#xff1a;李逵&#xff0c;在家称为"铁牛"&#xff0c;江湖上人称"黑旋风&…

【一键直装、无需破解】Proteus8.9 SP2 Pro 下载、安装、汉化详细图文教程

Proteus8.9 安装教程 软件安装包下载视频教程一、安装软件解压二、软件安装常见问题及解决方法&#xff1a;三、汉化 Proteus8.9 SP2 Pro 安装教程 本破解教程仅供个人及 proteus 8.9粉丝们交流学习之用&#xff0c;请勿用于商业用途&#xff0c; 谢谢支持。此版本为Proteus8.9…

使用Python,Xpath获取所有的漫画章节路径,并下载漫画图片生成单个/多个pdf,并进行pdf合并

使用Python&#xff0c;Xpath获取所有的漫画章节路径&#xff0c;并下载漫画图片生成单个/多个pdf&#xff0c;并进行pdf合并 1 效果图2 原理2.1 pa_mh.py获取喜欢的漫画及所有章节2.2 pyImg2pdf.py根据图片生成单个/多个pdf并增加章节提示 3 源码3.1 pa_mh.py获取喜欢的漫画及…

YOLOV7量化第一步: 准备模型

1. 准备模型 手动/自动插入QDQ节点 1.1 准备容器 准备容器的时候有可能出现共享内存的问题, 这里在启动容器的时候设置一下, # 增加了里面的共享内存 docker run --gpus all -it --shm-size64g --name env_pyt_1.12 -v $(pwd):/app nvcr.io/nvidia/pytorch:22.03-py3 美式的…

浏览器本地存储之Cookie和webStorage

浏览器本地存储主要包括 Cookie 和 Web Storage 两种机制。它们都是用来在客户端存储数据&#xff0c;以便在浏览器会话之间保持信息或在同一会话中的页面之间共享信息。 一、Cookie 1.1 概念 cookie是客户端与服务器端进行会话使用的一个能够在浏览器本地化存储的技术。简言…

【Hyper-V】Windows的Hyper-V管理器创建的虚拟机上怎么复制粘贴文件

在hyper-V 管理器中创建的虚拟机里面&#xff0c;发现它是不能直接复制粘贴文件的&#xff0c;那只能粘贴纯文本内容&#xff0c;也就是模拟输入内容&#xff0c;这是虚拟系统是被隔离的&#xff0c;也带来不便之处&#xff0c;要怎么解决这个限制呢。 例如&#xff0c;打开一…

Frame Buffer设备驱动 (ili9488 3.5寸tft屏)

Frame Buffer设备驱动 Frame Buffer设备ili9488介绍驱动编写代码编写ili9488.c设备树修改测试ili9488代码分析 LCD资料下载 Frame Buffer设备 在早期的输出显示设备中&#xff0c;大部分为CRT显示器&#xff0c;随着技术的不断发展&#xff0c;现在大部分使用的是液晶显示器。这…

RabbitMQ死信队列原理与项目代码示例

1、产生死信消息的原因 当在消费消息时&#xff0c;如果队列里的消息出现以下情况&#xff0c;那么该消息将成为一条死信消息&#xff1a; 当一条消息被使用 channel.basicNack方法 或 channel.basicReject方法所nack响应 &#xff0c;并且此时requeue 属性被设置为false。 消…

使用Elasticsearch来进行简单的DDL搜索数据

说明&#xff1a;Elasticsearch提供了多种多样的搜索方式来满足不同使用场景的需求&#xff0c;我们可以使用Elasticsearch来进行各种复制的查询&#xff0c;进行数据的检索。 1.1 精准查询 用来查询索引中某个类型为keyword的文本字段&#xff0c;类似于SQL的“”查询。 创…

Python学习基础笔记六十七——格式化字符串

Printf-Style String Formatting: Printf风格字符串格式化 salary input(请输入薪资&#xff1a;)# 计算出缴税额&#xff0c;存入变量tax tax int(salary) *25/100 # 转化为字符串&#xff0c;方便下面的字符串拼接 taxStr str(tax) # 计算出税后工资&#xff0c;存入变…

Linux基础—1

1、命令行 1) 重要快捷键 按键作用Tab命令补全Ctrl强行终止当前程序Ctrld键盘输入结束或退出终端Ctrls暂停当前程序&#xff0c;暂停后按下任意键恢复运行Ctrlz将当前程序放到后台运行&#xff0c;恢复到前台为命令fgCtrla将光标移至输入行头&#xff0c;相当于Home键Ctrle将…

计算机操作系统-第六天

目录 1、操作系统的体系结构&#xff08;简要了解&#xff09; 操作系统的内核&#xff1a; 操作系统的体系结构 关于微内核的相关理解&#xff1a; 本节思维导图&#xff1a; 1、操作系统的体系结构&#xff08;简要了解&#xff09; 操作系统的内核&#xff1a; 内核是…

整理总结提高抖音小店商品转化率的五大策略

要提高抖音小店的商品转化率&#xff0c;即将浏览者转化为实际购买者&#xff0c;四川不若与众整理了需要注意的以下几个关键因素。 首先&#xff0c;优化商品页面设计。商品页面是消费者获取产品信息和决策的关键环节。商家应确保商品页面简洁清晰&#xff0c;配备高质量的产品…

Pytest+Allure生成可添加附件的测试报告

#测试套件层级 allure.feature("测试PecExplorer") #重试次数&#xff0c;粒度为用例&#xff0c;建议用例设计可重复性高 pytest.mark.flaky(reruns3) class TestPecExplorer:#功能模块层级allure.story("登录界面")#测试用例层级allure.title("Test…