笔试面试相关记录(5)

news2024/12/23 8:55:10

(1)给定一个字符串,含有大写、小写字母,空格,数字,需要将其变为满足如下条件:

所有的数字需要换成空格,并且字符串的头尾不包含空格,且整个字符串不包含连续的两个空格。

(2)给定n,k,L,R,接下拉n个数字,要从中选出某个序列,这个序列满足如下条件:

对于整个数组中的任意的k个连续的子数组,所选出的子序列必须包含子数组中的x个数字,其中x>=1 && x <= R;求所有满足条件的子序列的序列和(序列和就是序列中所有元素的数字相加)

示例

3 2 1 2

8 3 4 

输出48

(3)排雷:每次只能排去正方形的四个角的雷,如果雷的数目不够四个或者不在正方形的四个角,则不能排雷,输入数据为n行a b,其中a b表示雷的位置,求可以排雷的最大数目。

例如输入

8
0 0
0 1
1 0
1 1
2 0
2 1
10 0
10 1
输出4,最多可以拍雷四个。

(4)给定一个字符串如下3(a2(c))3(a)2(bc),其中n(str)表示str出现n次,其中n > 0 && n < 10,将其还原为原始字符串。

#include <iostream>
#include <stack>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    string str;
    while (cin >> str) { // 注意 while 处理多个 case
        int len = str.size();
        stack<string> stk;
        int i = 0;
        while(i < len) {
            if (str[i] == ')') {
                string t;
                while (stk.top() != "(") {
                    t += stk.top();
                    stk.pop();
                }
                // 取出(
                stk.pop();
                // 取出数字
                // 3(a2(c)) 3(a) 2(bc)
                string n = stk.top();
                stk.pop();
                if (n.find_first_of("123456789") != string::npos) {
                    // 是数字
                    int times = n[0] - '0';
                    string orign = t;
                    for (int k = 0; k < times-1; k++) {
                        t += orign;
                    }
                } 
                if (stk.size()) {   
                    string c = stk.top();
                    if (c != "(") {
                        t = c + t;
                        stk.pop();
                    }   
                }
                stk.push(t);
                i++;
            } else {
                if (str[i] == '(') {
                    stk.push("(");
                    i++;
                } else if(isdigit(str[i])) {
                    stk.push(to_string(str[i]-'0'));
                    i++;
                } else {
                    string l = "";
                    while (isalpha(str[i])) {
                        l += str[i];
                        i++;
                    }
                    stk.push(l);
                }
            }
        }
        cout << stk.top() << endl;
    }
}

(5)给一串数字,例如 9 8 5 6 3 2 4 1 7 0,第一个数字表示后面数字的个数,后面的数字都不重复,求出最小的峰值数,如果没有就输出-1(峰值数表示其值比左右两边都大的数字);

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    string str;
    while (std::getline(std::cin, str)) { // 注意 while 处理多个 case
        int len = str.size();
        vector<int> nums;
        int left = 0, t = 0;
        while (left < len) {
            if (isdigit(str[left])) {
                t = t*10 + (str[left]-'0');
            } else {
                nums.push_back(t);
                t = 0;
            }
            left++;
        }
        nums.push_back(t);
        // for (int i = 0; i < nums.size(); i++) {
        //     cout << nums[i] << "-";
        // }
        int min_head = 1e8;
        for (int i = 2; i < nums.size()-1; i++) {
            if (nums[i] > nums[i-1] && nums[i] > nums[i+1] && nums[i] < min_head) {
                min_head = nums[i];
            }
        }
        if (min_head == 1e8) {
            cout << -1 << endl;
        } else {
            cout << min_head << endl;
        }
    }
}

(6) 

    int a = 1;
    int &ra = a;
    int* pa = &a;
    int* pb = new int(a);
    a = 2;
    cout << *pa <<" " << *pb << endl;
    输出2 1

(7)

void func(char*) {
    cout << "char *" << endl;
}

void func(int) {
    cout << "int" << endl;
}
int main()
{
    func(nullptr);

    return 0;
}
输出char *

(8)

已知一个按照递增顺序排列的整数数组nums和一个目标值target,找出给定目标值在数组中的开始位置和结束位置。

要求:

1.时间复杂度O(log n)

2.空间复杂度O(1)

示例:

输入:nums=[3,5,5,8,8,8,10],target=8

输出:[3,5]

输入:nums=[3,5,5,8,8,8,10],target=9

输出:[-1,-1]

答题模板

class Solution {

public:

   vector<int> searchRange(vector<int>& nums, int target) {

   }

#include <iostream>
#include <vector>

using namespace std;

int searchleft(vector<int>& nums, int target) {
    int left = 0, right = nums.size()-1;
    while (left < right) {
        int mid = (left+right)>>1;
        if (nums[mid] >= target) {
            right = mid;
        } else {
            left = mid+1;
        }
    }
    if (nums[left] == target) return left;
    return -1;
}

int searchright(vector<int>& nums, int target) {
    int left = 0, right = nums.size()-1;
    while(left < right) {
        int mid = (left+right)>>1;
        if (nums[mid] <= target) {
            left = mid+1;
        } else {
            right = mid-1;
        }
    }
    return left;
}

vector<int> searchRange(vector<int>& nums, int target) {
    int left = searchleft(nums, target);
    vector<int> ans(2, 0);
    if (left == -1) {
        ans[0] = -1;
        ans[1] = -1;
        return ans;
    }
    int right = searchright(nums, target);
    ans[0] = left;
    ans[1] = nums[right] == target ? right:right-1;
    return ans;
}

int main() {
    vector<int> nums{3, 5, 5, 8, 8, 8, 8, 10};
    int target = 3;
    vector<int> ans = searchRange(nums, target);
    cout << ans[0] << " " << ans[1];
    system("pause");
    return 0;
}

(9)给你一个整数数组coins, 表示不同面额的硬币,以及一个整数amount,表示总金额。
计算并返回可以凑成总金额所需的 最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。
你可以认为每种硬币的数量是无限的。
要求:时间复杂度O(Sn), S是金额,n是面额数

数值范围:
1 <= coins.length <= 12
0 <= amount <= 10^4

【测试用例】
输入:coins = [1, 2, 5], amount = 11
输出:3
输入:coins = [2], amount = 3
输出:-1
输入:coins = [1], amount = 0
输出:0

【参考函数】
int coinChange(vector<int>& coins, int amount) {}

#include <iostream>
#include <vector>

using namespace std;

int coinChange(vector<int>& coins, int amount) {
    vector<int> dp(amount+1, 1e9);
    // 总价为0时,需要0张
    dp[0] = 0;
    int len = coins.size();
    for (int i = 0; i < len; i++) {
        for (int j = coins[i]; j <= amount; j++) {
            dp[j] = min(dp[j], dp[j-coins[i]] + 1);
        }
    }
    if (dp[amount] == 1e9) {
        return -1;
    }
    return dp[amount];
}

int main() {
    vector<int> coins{1,2,5};
    int amount = 11;
    cout << coinChange(coins, amount);
    system("pause");
    return 0;
}

(10)

你参与了一个微信小游戏的研发,策划同学计划给你发布n项任务,每项任务会有一个 发布时间点r 和 预估处理时长p ,你需要等待任务发布后才能开始编码实现,同时每项任务都会有一位测试同学跟进测试工作,你需要合理安排工作,让所有测试同学等待的时间之和最少,此外你作为一个资深的程序员,多项任务可以交替进行。
输入:n r1 p1 ... rn pn
输出:各项任务的任务id和完成时间,任务id从下标1开始,按完成时间升序排列
比如
输入:2 1 4 3 1
即发布2项任务,任务1的发布时间点r=1,处理时长p=4;任务2的发布时间点r=3,处理时长p=1,合理的工作安排如下图所示:

输出:
2 4
1 6
测试同学等待的总时长为10
                                                        

image.png

【测试用例】
输入:2 1 4 3 1
输出:
2 4
1 6
输入:3 3 3 4 1 1 7
输出:
2 5
1 7
3 12
输入:2 5 2 3 1
输出:
2 4
1 7
【题目1】请简要阐述解题思路(12分)
【题目2】编写相应的程序实现(24分)
【参考函数】
struct Task {
   int i;          // 任务id
   int r, p;       // 发布时间,处理时长
};
vector<vector<int>> processTasks(vector<Task>& tasks) {}

思路:按照结束时间最早进行排序,这个时候的顺序就是最终的任务执行的顺序,因为多项任务交替进行,每一个任务都有一个测试人员,要让所有测试人员等待最小的时间,需要让 能够最先完成的任务最先完成,如果最先完成的没有在最开始完成,那么它带来的延迟会加到其他所有的测试人员上。(个人思路,不确定是不是正确的)

 

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

struct Task {
    int i;
    int r, p;
};

static bool cmp(Task& t1, Task& t2) {
    return t1.r + t1.p < t2.r + t2.p;
}

vector<vector<int>> processTasks(vector<Task>& tasks) {
    int last_start = tasks[0].r;
    vector<vector<int>> ans;
    int len = tasks.size();
    // 此时第一个任务就是最先完成的任务,直接放入ans中
    ans.push_back({tasks[0].i, tasks[0].r + tasks[0].p});
    // 遍历剩下的任务
    for (int i = 1; i < len; i++) {
        // 分三种情况
        if (tasks[i].r < last_start) {
            int diff = last_start - tasks[i].r;
            last_start = tasks[i].r;
            ans.push_back({tasks[i].i, ans.back()[1] + tasks[i].p - diff});
        } else if (tasks[i].r > tasks[i-1].r + tasks[i].p) {
            ans.push_back({tasks[i].i, ans.back()[1] + tasks[i].p});
        } else {
            int diff = tasks[i].r - (tasks[i-1].r + tasks[i-1].p);
            last_start += diff;
            ans.push_back({tasks[i].i, ans.back()[1] + diff + tasks[i].p});
        }
    }
    return ans;
}

int main() {
    int n;
    cin >> n;
    vector<Task> tasks(n);
    for (int i = 0; i < n; i++) {
        cin >> tasks[i].r;
        cin >> tasks[i].p;
        tasks[i].i = i+1;
    }
    sort(tasks.begin(), tasks.end(), cmp);

    // for (int i = 0; i < n; i++) {
    //     cout << tasks[i].r << " " << tasks[i].p << endl;
    // }
    
    vector<vector<int>> ans = processTasks(tasks);
    for (int i = 0; i < ans.size(); i++) {
        cout << ans[i][0] << " " << ans[i][1] << endl;
    }
    
    system("pause");
    return 0;
}

 

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

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

相关文章

网络地址转换技术NAT以及路由器LAN口与WAN口的数据交换

NAT技术 网络地址转换&#xff08;NAT&#xff09;技术可以帮助局域网设备通过私有IP地址访问互联网。以下是NAT技术如何实现这一功能的基本原理&#xff1a; 私有IP地址&#xff1a;在一个局域网中&#xff0c;通常使用私有IP地址来为设备分配网络标识。私有IP地址范围包括以…

OT:数字设定框(QSpinBox:处理整数,QDoubleSpinBox:处理浮点数)

widget.h #ifndef WIDGET_H #define WIDGET_H //数字设定框 #include <QWidget> #include <QSpinBox> //处理整数 #include <QDoubleSpinBox> //处理浮点数class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent 0);~Widget();private:…

RabbitMQ 消息应答

每日一句 物是人非事事休,欲语泪先流。 概述 为了保证消息在发送过程中不丢失,RabbitMQ引入了消息应答机制, 消费者在接收到消息并且处理该消息后,告诉RabbitMQ它已经处理了,RabbitMQ可以把消息删除了。 自动应答 消息发送后立即被认为已经传送成功,这种模式需要在…

I Pa?sWorD

2023icpc网络赛第一场 I 题意&#xff1a;题目给出只包含大小写字母&#xff0c;数字以及?的字符串&#xff0c;对于每一个小写字母&#xff0c;这一位字符既有可能是该小写字母&#xff0c;也有可能是该小写字母的对应大写字母&#xff0c;也就是该位的字符有两种可能&#x…

01. pring Cloud微服务系列之 包版本号约定

Spring Cloud微服务系列文章&#xff0c;点击上方合集↑ 1. Java8 目前市场上最常用的是Java8&#xff0c;而Java17则代表着未来的发展趋势。虽然Spring Boot 3已经发布&#xff0c;但它要求最低版本为Java17。然而&#xff0c;考虑到目前很多开发工具库还没有完全适配Java17…

批处理小程序的制作

一、介绍 批处理是一种将一系列计算机任务按照预定义的顺序进行自动化处理的技术。它是通过批处理脚本或命令文件来实现的&#xff0c;可以在不需要人工干预的情况下&#xff0c;批量运行多个命令或程序。 批处理脚本的优点 1. 自动化&#xff1a;批处理可以自动执行重复性任…

数据库----数据查询

1.6 查询语句 语法&#xff1a;select [选项] 列名 [from 表名] [where 条件] [group by 分组] [order by 排序][having 条件] [limit 限制]1.6.1 字段表达式 mysql> select 锄禾日当午; ------------ | 锄禾日当午 | ------------ | 锄禾日当午 | ---…

5个最好的乐高设计软件

如果你的目标是构建一个由数千个元素组成的乐高套装&#xff0c;你需要首先使用现有的最佳乐高设计软件进行规划。 通过使用本文中介绍的软件&#xff0c;你将学会创造性地思考并在不使用架构部件的情况下进行构建。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 乐高设…

最新AI创作系统+ChatGPT商业运营源码+支持GPT4.0+支持国内AI模型/支持AI绘画

一、AI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统&#xff1f;小编这里写一个详细图文教程吧&#x…

多线程的学习上篇

座右铭: 天行健&#xff0c;君子以自强不息;地势坤&#xff0c;君子以厚德载物. 引入进程这个概念的目的 引入进程这个概念,最主要的目的,是为了解决“并发编程"这样的问题. 这是因为CPU进入了多核心的时代 要想进一步提高程序的执行速度,就需要充分的利用CPU 的多核资源…

部署Envoy Sidecar代理:演示如何将Envoy作为Sidecar代理注入到应用容器中

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

【pytest】 pytest拓展功能 PermissionError问题

目录 1. pytest-html 1.1 PermissionError: [Errno 13] Permission denied: D:\\software\\python3\\anconda3\\Lib\\site-packages\\pytest_html\\__pycache__\\tmp_ttoasov 1.2错误原因 2. 失败用例重试 3. 用例并行执行 pytest-parallel 1. pytest-html 管理员打开 A…

使用postman测试邮件接口

首先找到token的位置 找到token的值之后 复制接口文档里的地址&#xff0c;在接口文档给的底之前前加api 配置token 在params参数里增加token参数 值复制浏览器里的token参数 发送send就ok了

交换机的工作原理(含实例,华为ensp操作)

目录​​​​​​​ ​​​​​​​1.交换机学习和转发 案例 1.设置静态地址表项 2.配置黑洞mac地址表项 1.交换机学习和转发 交换机工作在数据链路层。当交换机从某个端口收到一个帧时&#xff0c;它并不是向所有的接口转发此帧&#xff0c;而是根据此帧的目的MAC地址&a…

JMeter:接口测试基础介绍

一、什么是接口 接口是非常抽象的概念&#xff0c;先来看下中国最大的综合性辞典《辞海》是怎样定义接口的&#xff1a; 两个不同系统或系统中两个不同特性部分的交接部分。一般分硬件接口和软件接口两种。前者是为连接计算机各部分之间、计算机与计算机之间、计算机与外部系统…

Matlab论文插图绘制模板第114期—带图形标记的图

之前的文章中&#xff0c;分享了Matlab带线标记的图&#xff1a; 带阴影标记的图&#xff1a; 带箭头标记的图&#xff1a; 进一步&#xff0c;分享一下带图形标记的图&#xff0c;先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&…

9.18 QT作业

mainwindow.h QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWindow();signals:void jump(); //自定义跳转信号函数private slots:vo…

小插曲 -- 使用Linux编写 判断程序是否在运行的小程序

编写思路 首先&#xff0c;在执行“ps -elf |grep xxx”时&#xff0c;如果xxx存在&#xff0c;通常会有两条结果&#xff0c;一个是xxx对应的PID&#xff0c;一个则是grep对应的PID&#xff0c;但是如果我希望执行命令后&#xff0c;xxx存在就只有xxx对应的PID&#xff0c;不…

Vue3函数式编程

文章目录 前言一、三种编程风格1.template2.jsx/tsx3.函数式编写风格 二、函数式编程1.使用场景2.参数3.例子3.render渲染函数 总结 前言 本文主要记录vue3中的函数式编程以及其他编程风格的简介 一、三种编程风格 1.template Vue 使用一种基于 HTML 的模板语法&#xff0c;…

QML元素定位器:Row、Colum、Grid、Flow、定位器嵌套以及Repeater用法

在QML中,定位器(Positioner)是一种特殊的组件,用于管理其子项的位置。定位器确保其子项始终根据给定的规则排列。Qt Quick提供了几种定位器,用于处理不同的布局需求。 以下是一些常用的QML定位器: Row:将其子项沿水平线排列。Column:将其子项沿垂直线排列。Grid:将其子…