数组面试题

#include<iostream>
using namespace std;
//数组求和
int sum(int *a, int n)
{
	return n == 0 ? 0 : sum(a, n - 1) + a[n - 1];
}
//递归法数组求和
int sum2(int *a, int n)
{
	int s = 0;
	for (int i = n - 1; i > 0; i--){
		s += a[i];
	}
	return s;
}
//求数组的最大最小值
void Max_Min(int *a, int n, int &max_value, int &min_value)
{
	max_value = a[0];
	min_value = a[0];
	for (int i = 0; i < n; i++){
		if (a[i] > max_value)
			max_value = a[i];
		if (a[i] < min_value)
			min_value = a[i];
	}
}
//求数组中出现次数超过一半的元素
int halftime_val(int *a, int n)
{
	typedef struct valuetype{
		int num;
		int time;
	}value;
	int target_val = -1;
	value* data = new value[n];

	for (int i = 0; i < n; i++) //统计数组元素出现的次数
	{
		data[i].num = a[i];
		data[i].time = 1;
		for (int j = 0; j < i; j++){
			if (data[i].num == data[j].num)
				data[i].time++;
		}
	}
	for (int i = 0; i < n; i++){
		if (data[i].time > n / 2){
			target_val = data[i].num;
		}
	}
	delete data;
	return target_val;
}

// 找出数组中出现次数超过一半的元素
int Find(int* a, int n)
{
	int curValue = a[0];
	int count = 1;

	for (int i = 1; i < n; ++i)
	{
		if (a[i] == curValue)
			count++;
		else
		{
			count--;
			if (count < 0)
			{
				curValue = a[i];
				count = 1;
			}
		}
	}

	return curValue;
}

//求数组中距离最小的两点
//给定一个含有n个元素的整型数组,找出数组中的两个元素x和y使得abs(x - y)值最小
//先对数组排序,然后遍历一次即可
int compare(const void* a, const void* b)
{
	return(*(int*)a - *(int*)b);
}
void Min_Distance(int *a, int n)
{
	qsort(a, n, sizeof(int), compare);
	int min_distace = 0;
	int temp = 0, x1 = 0, x2 = 0;
	min_distace = a[1] - a[0];
	for (int i = 1; i < n - 1; i++)
	{
		temp = abs(a[i + 1] - a[i]);
		if (temp < min_distace)
		{
			min_distace = temp;
			x1 = a[i + 1];
			x2 = a[i];
		}
	}
	cout << min_distace << endl;
	cout << x1 <<" "<< x2 << endl;
}
//求两个有序数组的共同元素
/*
给定两个含有n个元素的有序(非降序)整型数组a和b,求出其共同元素,比如
a = 0, 1, 2, 3, 4
b = 1, 3, 5, 7, 9
输出 1, 3
***************************************************************
分析:充分利用数组有序的性质,用两个指针i和j分别指向a和b,比较a[i]和b[j],根据比较结果移动指针,则有如下三种情况

1. a[i] < b[j],则i增加1,继续比较
2. a[i] == b[j],则i和j皆加1,继续比较
3. a[i] < b[j],则j加1,继续比较
重复以上过程直到i或j到达数组末尾。
*/
void Find_Commom1(int *a, int *b, int n)
{
	int i = 0, j = 0;
	while (i < n && j < n){
		if (a[i] < b[j]) i++;
		if (a[i] == b[j]){
			cout << a[i] << " ";
			i++;
			j++;
		}
		if (a[i] > b[j]) j++;
	}
	cout << endl;
}
void Find_Commom(int* a, int *b, int n)
{
	int i, j;
	for (i = 0; i < n; i++){
		for (j = 0; j < n; j++){
			if (a[i] == b[j])
				cout << a[i] << " ";
		}
	}
	cout << endl;
}

int main()
{
	int a[4] = { 2, 4, 6, 8 };
	int b[5] = { 1, 5, 7, 9 };
	Find_Commom(a, b, 4);
	Find_Commom1(a, b, 4);
}

  来自:http://www.cnblogs.com/graphics/archive/2010/08/24/1761620.html#

时间: 2024-10-04 23:33:49

数组面试题的相关文章

8个PHP数组面试题

1.写函数创建长度为10的数组,数组中的元素为递增的奇数,首项为1. 代码如下: <?php function arrsort($first,$length){ $arr = array(); for($i=$first;$i<=$length;$i++){ $arr[] = $i*2-1; } return $arr; } $arr1 = arrsort(1,10); print_r($arr1); 输出: 复制代码 代码如下: Array ( [0] => 1 [1] => 3

PHP数组函数试题

使用Ctrl+A查看答案 1.将数组的键名全部转换成小写和大写的函数是什么?答:array_change_key_case($array [,CASE_LOWER|CASE_UPPER]) 原文地址:https://www.cnblogs.com/lijinyu/p/10207446.html

九章算法面试题45 寻找最大的储水容器

九章算法官网-原文网址 http://www.jiuzhang.com/problem/45/ 题目 给定一个正整数数组(a0,a1..),分别代表n个坐标(0,a0), (1,a1),根据这n个点画出n条线段,每条线段的两个端点分别为(i, ai)和(i, 0).找到两条线段,使得这两条线段和x轴所构成的容器储水容量最大.如[2,1,3], 最大,选择第一条线段和第三条线段,加上x轴所构成的容器,储水容量为4(高度为Min(2,3)=2,底为2) 解答 用两根指针,一根指向头,一根指向尾,如果

前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)持续更新 &#362414;

原文: http://blog.gqylpy.com/gqy/438 置顶:来自一名75后老程序员的武林秘籍--必读(博主推荐) 来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我

详解Javascript中的Array对象

基础介绍 创建数组 和Object对象一样,创建Array也有2种方式:构造函数.字面量法. 构造函数创建 使用构造函数的方式可以通过new关键字来声明,如下所示: 12 var arr = new Array();console.log(arr);//[] 当然也可以不通过new关键字来声明: 12 var arr = Array();console.log(arr); //[] 如果知道数组元素的个数,也可以直接传入数字表示元素个数: 12 var arr2 = new Array(5);c

C#与.NET程序员面试宝典

题目虽然有点多,但是都是最常见的面试题.如果大家准备参加相关的面试,最好看看.尤其最后的几十个跨国公司面试题.现在国内很多企业都开始学习这套方式,来为难大家.有准备,就容易成功. 即使大家今年不打算找工作,也可以作为一个水平考察,看看自己到底可以应对多少. 面试题1  介绍ASP.NET 答:asp.net是建立在通用语言运行库的程序架构,通过asp.net可以开发出非常强大的Web应用程序. 面试题2  介绍ASP.NET和ASP的区别 答:1.ASP.NET支持预编译. 2.ASP.NET拥

第二章 面试需要的基础知识

2.1 面试官谈基础知识 基础很重要 算法.复杂的 编程能力 数据结构 2.2 编程语言 程序员写代码总是基于某一种编程语言,因此技术面试的时候直接或者间接都会涉及至少一种编程语言.在面试的过程中,面试官要么直接问语言的语法,要么让应聘者用-~种编程语言写代码解决一个问题,通过写出的代码来判断应聘者对他使用的语言的掌握程度.现在流行的编程语言很多,不同公司开发用的语言也不尽相同.做底层开发比如经常写驱动的人更习惯用C, Linux下有很多程序员用C++开发应用程序,基于Windows的C#项目已

前端面试合集

VUE 1.什么是 vue 生命周期 2.vue生命周期的作用是什么 3.第一次页面加载会触发哪几个钩子 4.简述每个周期具体适合哪些场景 5.created和mounted的区别 6.vue获取数据在哪个周期函数 7.请详细说下你对vue生命周期的理解? vue路由面试题 mvvm 框架是什么?vue-router 是什么?它有哪些组件 active-class 是哪个组件的属性?怎么定义 vue-router 的动态路由? 怎么获取传过来的值vue-router 有哪几种导航钩子?6.$ro

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

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