热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++编程实战训练营第二期

题目1:给定一个非空数组A,包含有N个整数,起始下标为0。数组包含有奇数个元素,其中除了唯一一个元素之外,其他

题目1:

给定一个非空数组 A,包含有 N 个整数,起始下标为 0。数组包含有奇数个元素,其中除了唯一一个元素之外,其他每个元素都可以与数组中另一个有相同值的元素配对。

比如,在下面这个数组中:

A[0] = 9 A[1] = 3 A[2] = 9A[3] = 3 A[4] = 9 A[5] = 7A[6] = 9

  • 下标为 0 和 2 的元素的值是 9
  • 下标为 1 和 3 的元素的值是 3
  • 下标为 4 和 6 的元素的值是 9
  • 下标为 5 的元素的值是 7,无法配对

写一个函数:

int solution(vector &A);

对满足上述条件的数组 A,返回数组中无法配对的元素的值。

假定:

  • N is an odd integer within the range [1..1,000,000];
  • 数组 A 每个元素是取值范围 [1..1,000,000,000] 内的 整数 ;
  • all but one of the values in A occur an even number of times.

比如,给定以下数组:

A[0] = 9 A[1] = 3 A[2] = 9A[3] = 3 A[4] = 9 A[5] = 7A[6] = 9

函数应该返回 7,如上述解释。

复杂度:

  • 最坏-情况下,期望的时间复杂度是 O(N);
  • 最坏-情况下,期望的空间复杂度是 O(1), 输入存储除外 (不计输入参数所需的存储空间).

程序:

#include
#include
using namespace std;
//输出容器内所有值
void printf_vector(vector &A)
{auto v&#61;A;auto it&#61;v.begin();while (it !&#61; v.end()){cout<<*it<<" ";it&#43;&#43;;}cout<}
/*在容器v中,从a处开始&#xff0c;b处结束&#xff0c;寻找c&#xff0c;最后返回c的位置*/
vector::iterator find_vector(vector &A, vector::iterator a, vector::iterator b, int c)
{auto it&#61;a;auto v&#61;A;while (it !&#61; b){if(*it&#61;&#61;c)return it;it&#43;&#43;;}return it;//没找到&#xff0c;返回A.endl()
}
int solution(vector &A)
{vector v&#61;A;auto it&#61;v.begin();while (it !&#61; v.end()){//printf_vector(v);//auto it_temp&#61;find(it&#43;1,v.end(),*it);//vector自带的find函数auto it_temp&#61;find_vector(v,it&#43;1,v.end(),*it);//自定义的find函数if(it_temp&#61;&#61;v.end())return *it;elsev.erase(it_temp); it&#43;&#43;;}return -1;
}
int main()
{
vector v&#61;{9,3,9,3,9,7,7,10,9};
cout<getchar();
}

程序虽然能得出正确结&#xff0c;但是当容器内容很大时&#xff0c;效率比较低&#xff0c;还有很大的优化空间&#xff0c;如果有大神有更好的解决办法&#xff0c;望告知&#xff0c;万分感谢&#xff01;&#xff01;

题目2&#xff1a;

A zero-indexed array A consisting of N integers is given. Rotation of the array means that each element is shifted right by one index, and the last element of the array is moved to the first place. For example, the rotation of array A &#61; [3, 8, 9, 7, 6] is [6, 3, 8, 9, 7] (elements are shifted right by one index and 6 is moved to the first place).

The goal is to rotate array A K times; that is, each element of A will be shifted to the right K times.

Write a function:

vector solution(vector &A, int K);

that, given a zero-indexed array A consisting of N integers and an integer K, returns the array A rotated K times.

For example, given

A &#61; [3, 8, 9, 7, 6] K &#61; 3

the function should return [9, 7, 6, 3, 8]. Three rotations were made:

[3, 8, 9, 7, 6] -> [6, 3, 8, 9, 7] [6, 3, 8, 9, 7] -> [7, 6, 3, 8, 9] [7, 6, 3, 8, 9] -> [9, 7, 6, 3, 8]

For another example, given

A &#61; [0, 0, 0] K &#61; 1

the function should return [0, 0, 0]

Given

A &#61; [1, 2, 3, 4] K &#61; 4

the function should return [1, 2, 3, 4]

Assume that:

  • N and K are integers within the range [0..100];
  • each element of array A is an integer within the range [−1,000..1,000].

In your solution, focus on correctness. The performance of your solution will not be the focus of the assessment.

程序&#xff1a;

#include
#include
using namespace std;//输出容器内所有值
void printf_vector(vector &A)
{auto v &#61; A;auto it &#61; v.begin();while (it !&#61; v.end()){cout <<*it <<" ";it&#43;&#43;;}cout <}vector solution1(vector &A, int K)//此处K<&#61;N
{auto v &#61; A;auto count &#61; K;vector v1;vector v2;while (count){v1.push_back(*(v.end() - count));//把容器v的最后K个元素保存到容器v1count--;}count &#61; K;auto it &#61; v1.begin();/*将在v1的元素&#xff08;即v的后K个元素&#xff09;保存进v2*/while (it !&#61; v1.end()){v2.push_back(*it);it&#43;&#43;;}/*容器v中的前面要右移的元素保存进v2*/it &#61; v.begin();while (it !&#61; v.end() - K){v2.push_back(*it);it&#43;&#43;;}return v2;
}vector solution(vector &A, int K)
{ if(A.empty()) return A;else if((K % (A.end() - A.begin()))&#61;&#61;0) return A; //K刚好为容器大小的整数倍else {auto v&#61;solution1(A,K%(A.end() - A.begin()));return v;}
}
int main()
{vector v&#61;{ 1,2,3,1};int K&#61;5;//printf_vector(v);vector v1 &#61; solution(v, K);
// cout <<"right shift " <}



推荐阅读
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本题探讨了一种字符串变换方法,旨在判断两个给定的字符串是否可以通过特定的字母替换和位置交换操作相互转换。核心在于找到这些变换中的不变量,从而确定转换的可能性。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • Yii 实现阿里云短信发送 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
author-avatar
十月
我的征途是星辰大海!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有