计蒜客第三场

1、有序数组查找

假设一个数组,事先在你未知的情况下,以某一点分段有序排列。比如:(0,0,0,1,2,2,3 变成 0,0,1,2,2,3,0,定需要查找的数,在当前数组中查找,存在,返回ture,不存在,返回false。注意,这次数组中有重复的数字哦~

格式:

第一行输入数字n,接下来一行输入数组A[n],数组A[n]满足题目描述的条件,即分段有序。如:(2, 2, 0, 0, 1, 1);第三行输入要查找的target值。接下来一行输出true或者false。

样例输入

7
1 2 2 2 0 1 1
0

样例输出

true
#include<iostream> 
#include<algorithm>
using namespace std; 
int main()
{int n;cin>>n;int a[n];for(int i=0;i<n;i++)cin>>a[i]; int target,mid;cin>>target;sort(a,a+n);//对输入的数组排序int l=0, r=n-1;//二分查找while(r>=l){mid=(l+r)/2;/*if(target==a[mid]){cout<<"true"<<endl;return 0;}*/if(target>a[mid]) l=mid+1;else if(target<a[mid]) r=mid-1;else {cout<<"true"<<endl;return 0;} }cout<<"false"<<endl;return 0;
}

2、特殊质数

7331是一个特殊的质数,因为我们去掉个位得到的733是一个质数;再次去掉个位得到的73又是一个质数;再去掉个位后得到的7依然是一个质数。对于形似这种的质数,我们称呼它为特殊质数。

写一个程序对给定的待求特殊质数的位数 N (1≤N≤8)求出所有对应位数的特殊质数(注意:数字1不被看作一个质数)。

输入包括一个整数,为待求特殊质数的位数 N。

输出长度为N的特殊质数列表,每行一个。

#include<iostream>
using namespace std;
int n;
bool IsPrime(int a){for(int i=2;i*i<a;i++){if(a%i==0)return false;}return true;
}
void dfs(int sum,int cur){if(cur==n)cout<<sum<<endl;for(int i=1;i<=9;i++){if(i%2==0)continue;int asum=sum*10+i;if(IsPrime(asum)){dfs(asum,cur+1);}}
}
int main(){while(cin>>n){dfs(2,1);dfs(3,1);dfs(5,1);dfs(7,1);}return 0;
}

 3、颜色排序

给定由n个图案,图案是红色,白色或者蓝色其中的一种,开始的时候他们的顺序是混乱的。请你设计一种排序算法,使得相同颜色的图案紧挨着,并且顺序为红,白,蓝。    为了方便,这里我们用0, 1, 2分别代替红白蓝三种颜色,请将他们排序出来~  看这个例子,如:2 2 1 0 1 2 0,排序后变成0 0 1 1 2 2 2  注意:你不能使用库函数里面的排序算法哦~    要求:时间复杂度 O(n),空间复杂度 O(1)   

格式:  第一行输入数字n,第二行输入A[n], 其中数组里面只包含0, 1, 2三个数。第三行输出排好序的A[n]   

样例输入: 

8 1 2 1 2 0 0 0 2

样例输出 :

0 0 0 1 1 2 2 2

void SortByN(int a[], int length)
{if (a == NULL || length < 0){return;}//重新申请一个数组const int N =200;int b[N];//把新申请的数组全部初始化为0for (int i = 0; i < N; ++i){b[i] = 0;}//遍历a数组for (int i = 0; i < length; ++i){//例如:a[0] = 10;那么b[key] = b[10] = 1;表示有一个10; a[4] = 10;//那么b[key] = b[10] = 1+1 = 2,表示此时有两个10;int key = a[i];++b[key];//意思就是b数组里面存放的是a数组中某个元素的个数,b[10]表示在a数//组当中10出现的次数,b[0]表示0在a数组当中出现的次数
    }int index = 0;for (int i = 0; i < N; ++i){//如果b[0] = 0;表示a数组当中没有0;那么不执行这个循环;例如这里a是一个年龄数组,假设最小的年龄是18//那么b[0] -- b[17]都是等于0;那么第二个循环都不执行,第一个循环执行,i加到了18;b[18]=2;//那么a数组当中有两个18;而且这两个18就是最小的数字,那么a[0] = 18; a[1] = 18;for (int j = 0; j < b[i];++j){a[index] = i;++index;}}
}

4、单独的数字

一个整型数组中有一个元素只出现一次,其它元素都出现两次。求出只出现一次的元素。
要求:
线性时间复杂度,不能使用额外空间。
聪明的你能搞定吗?
格式:
第一行输入数字n,代表有n个数,根据题意,很明显n是奇数,
第二行输入数组A[i], i从0~n-1.
最后输出单独的数字。
样例1
输入:
7
1 3 2 0 3 2 1
输出:

/*那么这个题的突破口在哪里呢?注意这个数组的特殊性:其它数字都出现了两次,只有一个数出现了一次。可以想到运用异或运算,任何一个数字异或它自己都等于0。如果我们从头到尾依次异或数组中的每一个数,那么最终的结果就是那个只出现一次的数字,因为其他出现两次的数字全部在异或中被抵消为0了(异或运算遵循交换分配率)。举个栗子:2  3  4  2  3所有数字依次异或运算:2 xor 3 xor 4 xor 2 xor 3 = (2 xor 2) xor (3 xor 3) xor 4= 0 xor 0 xor 4 = 4最终结果4就是我们要找的那个只出现一次的数字。*/
#include<iostream>
using namespace std;
int main(){int num;int f(int a[],int n,int &num);int n;cin>>n;int a[n];for(int i=0;i<n;i++){cin>>a[i];}cout<<f(a,n,num)<<endl;return 0;
}
int f(int a[],int n,int &num){for(int i=0;i<n;i++)num^=a[i];return num;
}

 5、第一个没有出现的正数

给定一个数组,从 11 到 nn,找出数组中第一个没出现的正数。

例如:

给定[1,2,0],则返回 33。

给定[3,4,-1,1],则返回 22。

注意:

算法需要 \mathcal{O}(n)O(n) 的时间复杂度以及线性的空间复杂度。

#include<iostream>
using namespace std;
int main()
{int n;cin>>n;int a[1000001]={0};int tmp;for(int i=0;i<n;i++){cin>>tmp;if(tmp>0) a[tmp]++;}for(int i=1;i<=n;i++){if(a[i]==0){cout<<i;return 0;}}
}

 



























转载于:https://www.cnblogs.com/geziyu/p/9665777.html

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

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

相关文章

美国防部官员讨论量子科学、5G和定向能的发展

来源&#xff1a;国防科技要闻3月8日&#xff0c;美国防部国防研究与工程办公室负责现代化建设的三名官员在国防工业协会太平洋作战科技虚拟会议上讨论了量子科学、5G和定向能的发展。量子科学量子科学主要负责人保罗洛帕塔表示&#xff0c;国防部在过去的二三十年里一直在进行…

牛客网--密码验证合格程序(Java)

题目描述 密码要求: 1.长度超过8位 2.包括大小写字母.数字.其它符号,以上四种至少三种 3.不能有相同长度超2的子串重复 说明:长度超过2的子串 输入描述: 一组或多组长度超过2的子符串。每组占一行 输出描述: 如果符合要求输出&#xff1a;OK&#xff0c;否则输出NG 示例1 输…

9-18 学习如何使用Python包的管理

前提是安装好Anaconda 1.如何安装一个包 这里的语句 package_name为包的名字 例如 你可以在cmd窗口下输入 按下回车后 系统将会进行安装numpy包。 你也可以同时安装多个包&#xff0c;比如同时安装numpy、scipy、pandas包。 命令如下 注&#xff1a;numpy&#xff1a;是Python的…

牛客--合唱队

题目描述 计算最少出列多少位同学&#xff0c;使得剩下的同学排成合唱队形 说明&#xff1a; N位同学站成一排&#xff0c;音乐老师要请其中的(N-K)位同学出列&#xff0c;使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形&#xff1a;设K位同学从左到右依次编号…

java连接hbase时出现....is accessible from more than one module:

今天在用java程序连接hbase时&#xff0c;出现错误&#xff0c;The package org.apache.hadoop.hbase is accessible from more than one module: &#xff0c;在网上百度也没能找出答案&#xff0c;但是经过很长时间的查找之后中遇找到了原因&#xff0c;那就是我自导入jar包时…

AR行业发展现状:定义、技术原理及商业价值

文章来源&#xff1a;AR工业应用资料源自网络《Pokemon Go》这款游戏能够大火&#xff0c;除了一个好的IP之外。AR技术也功不可没。而在AR发光之后&#xff0c;什么是AR&#xff1f;它的技术原理是怎么样的&#xff0c;它能够具备哪些商业价值&#xff1f;希望通过这篇文章&…

基础学科如何不再“又难又穷”

来源&#xff1a;光明日报投身基础学科意味着什么——“奉献”“冷板凳”“异常艰苦”……也许&#xff0c;这是横亘在数十年间&#xff0c;大学生选报志愿时对“基础学科”的“刻板印象”。在知乎、豆瓣等大学生汇集的社交网站上&#xff0c;谈到基础学科&#xff0c;一位叫刘…

配置 Docker 加速器

Linux curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io 该脚本可以将 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。适用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、op…

Leetcode--72.编辑距离(java)

给你两个单词 word1 和 word2&#xff0c;请你计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 示例 1&#xff1a; 输入&#xff1a;word1 "horse", word2 "…

2021年阿贝尔奖公布!理论计算机科学和离散数学领域学者获奖

来源&#xff1a;前瞻网3月17日&#xff0c;2021年阿贝尔奖揭晓。挪威科学和文学院决定将2021年阿贝尔奖授予来自匈牙利&#xff0c;布达佩斯罗兰大学的Lszl Lovsz 和来自美国&#xff0c;普林斯顿高等研究院的 Avi Wigderson&#xff0c;以表彰两位科学家在理论计算机科学和离…

path环境变量丢失恢复

path环境变量不小心丢失&#xff0c;查询到的恢复方法记录一下 WindowsR键&#xff0c;打开&#xff1a;regedit后点击确定按钮 依次按照这个步骤找到path&#xff0c;鼠标右键修改&#xff0c;复制值到path环境变量中就可以了 转载于:https://www.cnblogs.com/liangcl/p/96797…

【剑指offer】面试题07. 重建二叉树(Java)

输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如&#xff0c;给出 前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树&#xff1a; 3 / \ 9 20 …

GPU深度报告,三大巨头,十四个国内玩家一文看懂【物联网智商精选】

来源: 智东西编辑&#xff1a;智东西内参关于GPU&#xff0c;你想知道的都在这里了。GPU是Graphics Processing Unit&#xff08;图形处理器&#xff09;的简称&#xff0c;它是一种专门在个人电脑、工作站、游戏机和一些移动设备&#xff08;如平板电脑、智能手机等&#xff0…

如何阻止button默认的刷新页面操作

当button在form表单时&#xff0c;点击button会自动触发button的默认事件&#xff0c;也就是刷新当前页面。那么如何阻止呢&#xff1a; 有两种方式&#xff1a; 一&#xff1a;将<button></button>改为<input type"button"> 或者直接在<butto…

MYSQL--一条SQL查询语句是如何执行的?

select * from user where id10 当输入这条查询语句之后会发生什么&#xff1f; MYSQL逻辑架构图 MYSQL大致可以分为两大部分&#xff1a;Server层和存储引擎层 下面来介绍各层中各部分的作用&#xff1a; 连接器&#xff1a; 客户端请求建立连接&#xff0c;在完成TCP连接…

人工智能功能级别与框架|《远望译品》

来源&#xff1a;远望智库预见未来人工智能功能级别与框架本文摘自《人工智能算法、作战环境及未来趋势预判》&#xff5c;《远望译品》1、人工智能功能级别人工智能不仅在知识域中运行&#xff0c;而且在不同级别上与其他理性个体及其问题空间相互作用。人们对人工智能的期望过…

指针和数组替换和区别

指针和数组替换和区别 指针和数组在很多方面都可以替换 为什么不直接用while(*str ! \0)涉及到了Lvalue和Rvalue的问题 // http://www.dotcpp.com/wp/692.html 例如有字符数组char a[100];当a做右值时候&#xff0c;我们可以把它赋给char *类型的指针&#xff0c;用来指向这个…

Leetcode--面试题 01.07. 旋转矩阵(Java)

给你一幅由 N N 矩阵表示的图像&#xff0c;其中每个像素的大小为 4 字节。请你设计一种算法&#xff0c;将图像旋转 90 度。 不占用额外内存空间能否做到&#xff1f; 示例 1: 给定 matrix [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵&#xff0c;使其变为:…

C盘扩展卷是灰色的扩容方法

当想要扩容C盘的时候可能会发现C盘的扩展卷竟然是灰色的。原因是C盘旁边没有紧挨着的“”未分配空间“”&#xff0c; 只要将D盘的空间分出一些来就可以了。 &#xff01;&#xff01;&#xff01;磁盘的分区合并有风险&#xff0c;重要文件等记得先备份 &#xff01;&#xf…

数据与分析领域的十大技术趋势

来源&#xff1a;人工智能与大数据近日&#xff0c;Gartner发布了数据与分析领域的十大技术趋势&#xff0c;为数据和分析领导者的新冠疫情&#xff08;COVID-19&#xff09;响应和恢复工作提供指导&#xff0c;并为疫情后的重启做好准备。数据和分析领导者如果希望在疫情后能持…