【C++面试总结之算法(四):数组】教程文章相关的互联网学习教程文章

面试题1: 二维数组中查找【代码】【图】

本题出自《剑指offer 名企面试官精讲典型编程题》面试题3。 题目3:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列按照从上到下递增的顺序排序。请完成一个函数,输入一个这样的二维数组和整数,判断数组中是否含有该整数。 例如下面的二维数组就是每行每列递增排序。如果在数组中查询7,则返回true;如果查找数字14,由于数组中不包含14,则返回false。 解决方法分析: 首先我们选取二维...

面试题36_数组中的逆序对

题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 解题思路思路一:暴力搜索,一次判断每一个数,其之后的数有没有比它小的,若有则计数加一。时间O(n^2) 思路二:利用归并排序方法,在归并的时候,计算逆序对数目。具体过程看代码。 时间O(nlogn)实现代码class Solution { public:int InversePairs(vector<int> data) {if(data.empty(...

面试题——4种数组去重的方法【代码】【图】

数组去重或者其衍生作为笔试题或者机试题出现的几率也是很大的,写出的方法越多,则让面试官觉得你思维越开阔,那么成功的几率当然就大了。废话不多说,下面来说说下面我整理的4中数组去重的方法方法一: findInArr方法+select方法组合  findInArr : 查找一个数在当前数组中是否存在,存在返回true,找完所有没有找到,返回false,这个数就是我们要操作的那个数组  select :循环数组,并调用findInArr方法 查找当前arr[...

LeetCode | 面试题03. 数组中重复的数字【剑指Offer】【Easy】【Python】【数组】【哈希表】【排序】【代码】

LeetCode 面试题03. 数组中重复的数字【剑指Offer】【Easy】【Python】【数组】【哈希表】【排序】问题力扣找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制:2 <= n <= 100000思路解法一哈希表遍历数组,未出现过的...

经典面试算法题:线性查找有序二维数组【代码】【图】

从右上角开始搜索,当前的元素map[x][y]和要搜索的数n有如下可能:map[x][y]==n --> 返回truemap[x][y]>n --> 向左移动map[x][y]<n --> 向下移动 搜索过程例子: AC代码:import java.util.Scanner;publicclass Main {publicstaticvoid main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();int m=sc.nextInt();int k=sc.nextInt();int x[][]=newint[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){...

面试题3.2:不修改数组找出重复的数字【代码】

题目描述:在一个长度n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。 例如,如果输入长度为8的数组{2,3,5,4,3,2,6,7},那么对应的输出是重复的数字2或者3。解法一:利用辅助数组 创建一个长度为n+1的辅助数组,将原数组的每个下标处元素的值作为辅助数组的下标,并使辅助数组的下标处元素的值加1,当值大于1时,说明出现重复。 新数组:索引 ...

面试题:在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字【代码】

由于有一个数字消失了,那必定有一个数只出现一次而且其它数字都出现了偶数次。用搜索来做就没必要了,利用异或运算的两个特性——1.自己与自己异或结果为02.异或满足交换律。因此我们将这些数字全异或一遍,结果就一定是那个仅出现一个的那个数。 示例代码如下:int[] arra = {11,12,3,12,11,12,12 };staticvoid Main(string[] args){int[] arra = {11,12,3,12,11,12,12 };int lostNum = 0;for (int i = 0; i < arra.Length; i++)...

《程序员代码面试指南》第八章 数组和矩阵问题 将正方形矩阵顺时针转动90【代码】【图】

题目将正方形矩阵顺时针转动90java代码package com.lizhouwei.chapter8;/*** @Description: 将正方形矩阵顺时针转动90* @Author: lizhouwei* @CreateDate: 2018/4/28 22:16* @Modify by:* @ModifyDate:*/ public class Chapter8_2 {public void rotate(int[][] matrix) {int tR = 0;int tC = 0;int dR = matrix.length - 1;int dC = matrix[0].length - 1;while (tR < dR) {rotateEdge(matrix, tR++, dR--, tC++, dC--);}}public v...

面试题:2个有序数组变为一个有序数组【图】

剑指offer 面试题5的相关题目2019.3 纽迈科技曾问过这个问题。思路1 :直接将两个数组合并在一起,然后排序,这时候需要考虑是快排还是啥的排序算法,压根没考虑数组的有序性!思路2:从头开始,分别比较对应数组,小的留下,这里需要一个问题,若2个数组的len不一样,这时候你要将剩下的那个较长的元素直接存储。 这里学习了.append() .extend() 和 + 的用法,重新整理: 原文:https://www.cnblogs.com/ivyharding/p/1121...

【程序员面试金典】面试题 10.01. 合并排序的数组【代码】

题目给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。 初始化?A 和 B 的元素数量分别为?m 和 n。示例:输入: A = [1,2,3,0,0,0], m = 3 B = [2,5,6], n = 3 输出:?[1,2,2,3,5,6]思路代码时间复杂度:O(m+n) 空间复杂度:O(1)class Solution { public:void merge(vector<int>& A, int m, vector<int>& B, int n) {int k = m + n - 1, i = m - 1, j = n - 1;while (i...

剑指offer-第六章面试中的各项能力(数组中只出现一次的数字)【代码】

题目:输入一个数组,该数组中有两个只出现一次的数字,其他的数字都出现两次,输出出只出现一次的数字。思路:首先,我们可以将这个数组分成两份,一份里面放一个只出现一次的数字。那么我们该怎么分呢?将整个数组中的数字都异或,那么那些等的数字异或后都化为0,因此最后出现的不为0的数字就是两个只出现一次的数字他们两个异或的结果。我们找到该结果中的最右边的一个1,然后根据这个1将数组划分为两份。Java代码://数组中只...

8个PHP数组面试题

网上找的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 [2]...

面试题42: 连续子数组的最大和(C++)【代码】

题目地址:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)题目示例示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解题思路动态规划:我们假设动态规划列表为f,f(i)代表以元素nums[i]为结尾的连续子数组...

美团面试题:寻找数组置尾操作的最小值

题目: 一个递增的整形数组,现在的操作是每次从数组的开头取出一个元素放在数组的末尾,连续n次这样的操作后得到一个新的数组, 现在把这个数组给你,请求出最少移动的次数。 解析: 1 最容易想到的方法就是依次遍历这个数组,找到最小值的位置,这样的时间复杂度就是O(n)。 2 考虑到事先是排好序的,所以我们可以使用二分查找法来实现这个操作,只不过是这个二分查找法是传统二分查找法的变种。 这里我们只要考虑以下3种情况。 <...

面试题五十六:数组中数字出现的次数【代码】

题目一:数组中只出现一次的两个数字 :除了两个数字只出现过一次,其他都出现两次;要求时间复杂度n 空间复杂度1 方法:由于其他出现两次,所以异或的结果是两个只出现过一次数字的异或结果,结果肯定不为0;那么结果用二进制表示中的第一个‘1’的位置,对数组进行分类,该位置为1的和0的,分为两个数组,此时 这两个数组分别 求只出现过一次的那个数就可以的出了;staticvoid FindNumsAppearOnce(int []date) {if(date==null||d...