【笔试常见编程题02】字符串中找出连续最长的数字串、数组中出现次数超过一半的数字、计算糖果、进制转换

本文主要是介绍【笔试常见编程题02】字符串中找出连续最长的数字串、数组中出现次数超过一半的数字、计算糖果、进制转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

1. 字符串中找出连续最长的数字串

读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述
个测试输入包含1个测试用例,一个字符串str,长度不超过255。
输出描述
在一行内输出str中里连续最长的数字串。
示例 1
输入
abcd12345ed125ss123456789
输出
123456789

思路1:

  1. 定义两个string,longfig和temp
  2. temp获取数字字符串,longfig保留最长数字字符串
    如果temp比longfig长,把temp赋值给longfig,temp置空
int main() {string s, longfig, temp; // longfig用来保存最长数字字符串getline(cin, s); for (int i = 0; i < s.size(); i++) // 遍历输入的字符串{while (s[i] - '0' >= 0 && s[i] - '0' <= 9) // 如果为数字,保存到temp{temp += s[i];i++;}if (temp.size() > longfig.size()) // 如果temp比longfig长,则把temp赋值给longfiglongfig = temp;temp = "";}cout << longfig;return 0;
}

2. 数组中出现次数超过一半的数字

给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
数据范围:,数组中元素的值
要求:空间复杂度:,时间复杂度
示例 1
输入
[1,2,3,2,2,2,5,4,2]
输出
2
示例 2
输入
[3,3,3,3,2,2,2]
输出
3
示例 3
输入
[1]
输出
1

思路1:

  1. 排序数组
    数字出现次数超过数组长度的一半
    中间那个数一定是最长数组
class Solution {
public:int MoreThanHalfNum_Solution(vector<int>& numbers) {sort(numbers.begin(), numbers.end());return numbers[numbers.size() / 2];}
};

思路2:

  1. 遍历一遍数组
  2. 在map中存每个元素出现的次数
    然后再遍历一次数组,找出众数
class Solution {
public:int MoreThanHalfNum_Solution(vector<int> numbers) {unordered_map<int,int> mp;for (const int val : numbers) ++mp[val];for (const int val : numbers) {if (mp[val] > numbers.size() / 2 ) return val;}return 0;}
};

思路3:(最优解)时间和空间复杂度:O(n),O(1)
如果两个数不相等,就消去这两个数,最坏情况下,每次消去一个众数和一个非众数,那么如果存在众数,最后留下的数肯定是众数

  1. 初始化:候选人cond = -1, 候选人的投票次数cnt = 0
  2. 遍历数组,如果cnt=0, 表示没有候选人,则选取当前数为候选人,++cnt
  3. 否则,如果cnt > 0, 表示有候选人,如果当前数=cond,则++cnt,否则–cnt
  4. 直到数组遍历完毕,最后检查cond是否为众数
class Solution {
public:int MoreThanHalfNum_Solution(vector<int> numbers) {int cond = -1;int cnt = 0;for (int i=0; i<numbers.size(); ++i) {if (cnt == 0) {cond = numbers[i];++cnt;}else {if (cond == numbers[i]) ++cnt;else --cnt;}}cnt = 0;for (const int k :numbers) {if (cond == k) ++cnt;}if (cnt > numbers.size() / 2) return cond;return 0;}
};

3. 计算糖果

A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息:
A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.
现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所有题设条件。
输入描述
输入为一行,一共4个整数,分别为A - B,B - C,A + B,B + C,用空格隔开。 范围均在-30到30之间(闭区间)。
输出描述
输出为一行,如果存在满足的整数A,B,C则按顺序输出A,B,C,用空格隔开,行末无空格。 如果不存在这样的整数A,B,C,则输出No
示例 1
输入
1 -2 3 4
输出
2 1 3

思路1:

  1. (整数1 + 整数3) / 2 = A
  2. (整数2 + 整数4) / 2 = B
  3. B - 整数2 = C
int main() {vector<int> v;int a, b, c;v.resize(4);for (int i = 0; i < 4; i++)cin >> v[i];a = (v[0] + v[2]) / 2;b = (v[1] + v[3]) / 2;c = b - v[1];if (a-b == v[0] && b-c == v[1] && a+b == v[2] && b+c == v[3])cout << a << " " << b << " " << c;else cout << "No";return 0;
}

4. 进制转换

给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
输入描述
输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。
输出描述
为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)
示例 1
输入
7 2
输出
111

思路1:

  1. 十进制转任何其他进制都可以用
    十进制数取模需要转换的进制(转二进制就取模二)
    取模的结果记录下来
  2. 十进制数除以需要转换的进制,所得的结果继续取模
  3. 直到十进制数为0,逆置所有取模的结果就是需要转换的进制

本题需要注意的是十进制数可能为0
和负数的情况,需要特殊处理

void TenScaleConvertOther(int M, int N, string& s) // 十进制转其他进制函数
{char figure[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };while (M) {s.push_back(figure[M % N]);M = M / N;}
}int main() {int M, N;cin >> M >> N;string s;if (M == 0) // 需要考虑M为0的情况s.push_back('0');TenScaleConvertOther(abs(M), N, s); // M可能为负数, 传绝对值过去reverse(s.begin(), s.end());if (M < 0)cout << '-' << s;else cout << s;   return 0;
}

这篇关于【笔试常见编程题02】字符串中找出连续最长的数字串、数组中出现次数超过一半的数字、计算糖果、进制转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹