华为往年笔试题【去重和排序】【vertor二维数组,迭代器】

题目:明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。

Input Param

n               输入随机数的个数

inputArray      n个随机整数组成的数组

Return Value

OutputArray    输出处理后的随机整数

注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。

自己比较笨的解法:

 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4
 5
 6 using namespace std;
 7
 8 void uniq_sort(vector<int> & array){
 9         for(vector<int>:: iterator it = array.begin(); it != array.end();it++){
10                 for (vector<int>:: iterator jt = it+1 ; jt != array.end();)
11                 {
12                         if(* jt < * it)
13                         {
14                                 int temp = * it;
15                                 * it = * jt;
16                                 * jt = temp;
17                                 jt ++ ;
18                         }
19                         else if(* jt == * it){
20                                 jt = array.erase(jt);
21                         }
22                         else
23                         {
24                                 jt ++ ;
25                         }
26                 }
27         }
28 }
29
30 int main(){
31
32         vector<vector<int>> init_array;
33         int n = 0;
34         /*if(cin >> n)
35         {
36                 for(int i = 0 ; i < n ; i ++){
37                         cin >>
38                 }
39         }*/
40         while(cin >> n){
41                 vector<int> temp_array;
42                 for(int i = 0 ; i < n ; i ++){
43                         int temp;
44                         cin >> temp;
45                         temp_array.push_back(temp);
46                 }
47                 init_array.push_back(temp_array);
48                 //test_num ++;
49                 //init_array.push_back(n);
50         }
51         for(int i = 0; i < init_array.size() ;i++){
52                 uniq_sort(init_array[i]);
53                 for( int j = 0; j < init_array[i].size() ; j++ )
54                 {
55                         cout << init_array[i][j] << endl;
56                 }
57                 //cout << endl;
58         }
59         return 0 ;
60 }

大神机智解法:

因为题目中限制了1-1000内的随机整数

 1 #include <iostream>
 2 using namespace std;
 3 int main() {
 4     int N, n;
 5     while (cin >> N) {
 6         int a[1001] = { 0 };
 7         while (N--) {
 8             cin >> n;
 9             a[n] = 1;
10         }
11         for (int i = 0; i < 1001; i++)
12             if (a[i])
13                 cout << i << endl;
14     }
15     return 0;
16 }

原文地址:https://www.cnblogs.com/lijiaxin/p/10658161.html

时间: 2024-10-07 02:19:03

华为往年笔试题【去重和排序】【vertor二维数组,迭代器】的相关文章

每日一题10:在排序的二维数组中查找

排序的二维数组是这样的:在每一行中元素是递增的,在每一列中元素也是递增的,比如: 11 34 35 47 51 13 37 40 52 61 19 42 50 79 80 给定一个值,判断其是否在这样排序的二维数组中. 首先,先来生成测试数据,思路如下:1)先选择一种将给定输入按升序排列.2)构造一个二维数组,寻找该数组中以第一个元素为起点,确定一个最大的正方形区域(其宽要么与原数组的行或与原数组的列数相同).3)按规则,在这个正方形中,每个对角线元素都不小于从数组起点到这个元素所构成的正方形区

华为往年笔试题【空瓶子换水喝】

题目:有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水.小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子.然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板.如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝? 自己的笨解法: 1 #include<iostream> 2 #include<math.h> 3

二维数组按某列排序

1 using FrameWork.IoC.Achieve.IoCAbstractBasics; 2 using FrameWork.IoC.Achieve.IoCBasics; 3 using FrameWork.IoC.Case.Test; 4 using FrameWork.IoC.Case.Test.TestOne; 5 using FrameWork.IoC.Case.Test.TestTwo; 6 using System; 7 using System.Collections; 8

C# 实现二维数组的排序算法(代码)

class Order { /// <summary> /// 对二维数组排序 /// </summary> /// <param name="values">排序的二维数组</param> /// <param name="orderColumnsIndexs">排序根据的列的索引号数组</param> /// <param name="type">排序的类型,

剑指offer 面试题(二维数组中的查找) (2)

面试题: 二维数组中的查找 /* 题目:   在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成 一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该数. */ ps:(其实前段时间我就做过这道题,今天看到了,觉得还是有点生,那就再来一次吧) 题目分析:  在分析这个问题的时候,我们首先要看,在一个二维数组中查找一个数字是否存在,那么很多人就觉得 简单了,遍历二维数组与所需要查找的数字进行比较不就完了!  不可否认的是你说的是可行的,可是

【剑指Offer面试题】二维数组中的查找

下决心AC所有剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> 对于面试题,面试官往往更希望我们能提出优化方法,这样更能体现我们的思维能力以及传说中的"内功".所以做剑指offer要着重训练这方面,多总结多细究,总是有好处的.加油~ 二维数组中的查找 时间限制:1 秒内存限制:32 兆 特殊判题:否提交:19005解决:3642 题目描述: 在一个

【剑指Offer面试题】九度OJ1384:二维数组中的查找

下决心AC全部剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> 对于面试题,面试官往往更希望我们能提出优化方法,这样更能体现我们的思维能力以及传说中的"内功".所以做剑指offer要着重训练这方面,多总结多细究,总是有优点的.加油~ 题目链接地址: http://ac.jobdu.com/problem.php?pid=1384 二维数组中的查找

[java学习笔记]java语言基础概述之数组的定义&amp;常见操作(遍历、排序、查找)&amp;二维数组

1.数组基础 1.什么是数组:           同一类型数据的集合,就是一个容器. 2.数组的好处:           可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式:  (一旦创建,必须明确长度)          格式1:              元素类型   [ ]  数组名  =  new  元素类型  [元素个数即数组的长度]:              示例:int[] array = new int[5];          格式2:           

PHP二维数组去重的方法(保留各个键值的同时去除重复的项)-- 二维数组的唯一性

对于如下二维数组,要求对其进行去重: $arr = array( '0'=>array( 'name'=>'james', 'age'=>30, ), '1'=>array( 'name'=>'susu', 'age'=>26, ), '2'=>array( 'name'=>'james', 'age'=>30, ), 'new'=>array( 'name'=>'kube', 'age'=>37, ), 'list'=>arr