数组的相关题目

本文深入探讨数组数据结构的特点及应用,详细解答了28道常见数组面试题,包括查找缺失数字、去除重复项、查找子数组等,旨在帮助程序员提升算法能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组的特点:长度固定,查询复杂度O(1) ,增加或者删除一个元素是很慢

经常问数组的反转、数组的排序或者查找数组中的一个元素等。

1. How to find the missing number in integer array of 1 to 100?
2. How to find duplicate number on Integer array in Java? 
3. How to check if array contains a number in Java?
4. How to find largest and smallest number in unsorted array?
5. How to find all pairs on integer array whose sum is equal to given number? 
6.   How to find repeated numbers in an array if it contains multiple duplicates?
7. Write a program to remove duplicates from array in Java?
8. How to sort an array in place using QuickSort algorithm?
9. Write a program to find intersection of two sorted arrays in Java? 
10. There is an array with every element repeated twice except one. Find that element?
11. How to find kth smallest element in unsorted array? 
12. How to find kth largest element in unsorted array? 
13 How to find common elements in three sorted array? 
14. How find the first repeating element in an array of integers? 
15. How to find first non-repeating element in array of integers?
16. How to find top two numbers from an integer array?
17. How to find the smallest positive integer value that cannot be represented as sum of any subset of a given array? 
18. How to rearrange array in alternating positive and negative number? 
19. How to find if there is a sub array with sum equal to zero? 
20. How to remove duplicates from array in place? 
21. How to remove a given element from array in Java? 
22. How to merge sorted array? 
23. How to find sub array with maximum sum in an array of positive and negative number? 
24. How to find sub array with largest product in array of both positive and negative number? 
25. Write a program to find length of longest consecutive sequence in array of integers? 
26. How to find minimum value in a rotated sorted array? 
27. Given an array of of size n and a number k, find all elements that appear more than n/k times? 
28. How to reverse array in place in Java? 
29. Difference between array and linked list data structure? 
30. How to check if array contains a duplicate number? 
 

代码:

1.如何在1到100的整数数组中查找缺少的数字

package com.cyw.interview.array;

import java.util.Arrays;
import java.util.BitSet;

/**
 * Java Program to find missing numbers
 * 
 * we have numbers from 1 to 100 that are put into an integer array, what's the
 * best way to find out which number is missing?
 */
public class FindMissingNumInArray {

	public static void main(String[] args) {

		// four missing number
		printMissingNumber(new int[] { 1, 2, 3, 4, 9, 8 }, 10);

		// Only one missing number in array
		int[] iArray = new int[] { 1, 2, 3, 5 };
		int missing = getMissingNumber(iArray, 5);
		System.out.printf("数组 %s 在长度 %d 中丢失的数字是 %n", Arrays.toString(iArray),5, missing);

	}

	public static void printMissingNumber(int[] numbers, int count) {
		int missingCount = count - numbers.length;
		var bitSet = new BitSet(count);
		for (var number : numbers) {
			bitSet.set(number - 1);
		}
		System.out.printf("数组 %s 在长度为 %d 中丢失的数字是 %n", Arrays.toString(numbers),count);
		var lastMissingIndex = 0;
		for (var i = 0; i < missingCount; i++) {
			lastMissingIndex = bitSet.nextClearBit(lastMissingIndex);
			System.out.print(++lastMissingIndex+",");
		}
		System.out.println();
	}

	/**
	 * 
	 * */
	public static int getMissingNumber(int[] numbers, int totalCount) {
		int expectedSum = totalCount * (totalCount + 1) / 2;
		int actualSum = 0;
		for (int i : numbers) {
			actualSum += i;
		}
		return expectedSum - actualSum;
	}
}

关于这个问题,当已知只有一个丢失的数字的时候,可以用理论值的和减去时间值的和,从而找到丢失的数字。

然而实际中经常遇到的问题是,查找不止一个丢失的数字时,使用位图BitSet 来解决。

使用BitSet解决的类似问题有:


1、统计40亿个数据中没有出现的数据,将40亿个不同数据进行排序。
2、现在有1千万个随机数,随机数的范围在1到1亿之间,要求写出一种算法,将1到1亿之间没有在随机数中的数求出来。
3、有一个40G大小的文件,里面存的是32位正整数记录,我需要查找其中一个文件,问如何查找?

转载于:https://my.oschina.net/8808/blog/2996603

<think>好的,我现在需要处理用户关于C语言数组编程练习题目的请求。首先,用户明确表示想查找相关的编程题目或练习,并且提供了三个引用作为参考。我需要仔细分析这些引用的内容,看看如何从中提取合适的题目或者根据这些内容生成新的题目。 首先,引用[1]提到了三个数组练习题,包括数组元素逆序排列,但没有具体代码。引用[2]提供了一个对十个数字进行排序的示例,使用的是冒泡排序算法。引用[3]则是关于二维数组的输出,使用双重循环逐个输出元素。用户的当前问题是想获得更多的C语言数组练习题,因此我需要结合这些引用中的例子,生成更多类似的题目,同时确保覆盖不同的数组操作类型。 接下来,我需要考虑用户可能的水平。题目需要从基础到稍微复杂一些,涵盖一维数组、二维数组、常见算法如排序、查找、逆序等。同时,用户提供的引用中有排序和二维数组的例子,所以我可能需要补充其他类型的题目,比如数组的查找、统计、合并等操作。 然后,我需要确保每个题目都有明确的描述,可能包括输入输出示例,或者具体的功能要求。例如,引用[2]中的题目要求输入十个整数并排序,而引用[3]则是输出二维数组。因此,新生成的题目也应该有类似的具体要求,便于用户练习。 另外,要注意题目的多样性。除了排序和输出,还可以考虑插入元素、删除元素、数组的旋转、求最大值/最小值、计算平均值、统计特定元素出现次数等。这些操作都是数组处理中的常见任务,适合作为练习题。 同时,我需要参考用户提供的引用结构,比如在引用[1]中提到的三个题目,可能用户希望每个题目都有一定的挑战性但不过于困难。因此,生成的题目应该分层次,从基础开始,逐步增加难度。 现在,我需要检查是否有重复或类似的题目。例如,引用[2]已经有一个排序题目,所以新题目中可以包含其他排序方法,如选择排序,或者更复杂的操作。引用[3]是关于二维数组的输出,可以扩展到二维数组的其他操作,如矩阵转置、行列求和等。 最后,确保生成的题目符合C语言的语法和常见实践,比如数组的声明、循环结构的使用、输入输出函数等。题目应鼓励用户练习这些基本技能,并巩固对数组的理解和应用。 总结一下,我需要生成至少五个不同但相关的C语言数组编程练习题,涵盖一维和二维数组,包括排序、查找、统计、修改等操作,确保题目描述清晰,有明确的输入输出要求,并参考用户提供的引用中的结构,保持一致性。</think>以下是根据C语言数组知识点设计的5个经典编程练习题,包含一维数组和二维数组的常见操作: ### 一维数组练习题 1. **数组元素逆序存储** ```c // 要求:输入10个整数存入数组,逆序存储后输出 // 示例输入:1 2 3 4 5 6 7 8 9 0 // 示例输出:0 9 8 7 6 5 4 3 2 1 ``` 实现思路:使用双指针法,首尾元素交换直到中间位置[^1] 2. **数组最值查找** ```c // 要求:输入n个学生成绩,找出最高分和最低分 // 扩展:统计高于平均分的人数 ``` 涉及知识点:数组遍历、条件判断 ### 二维数组练习题 3. **矩阵转置** ```c // 要求:实现3x4矩阵的转置(行列交换) // 原始矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 // 转置后: 1 5 9 2 6 10 3 7 11 4 8 12 ``` 实现要点:双重循环控制行列交换[^3] ### 算法应用练习 4. **冒泡排序优化** ```c // 要求:在基础冒泡排序上增加以下优化: // 1. 记录交换位置提前结束排序 // 2. 添加有序判断标志位 ``` 参考代码框架: ```c for(j=0; j<9; j++) { int flag = 1; for(i=0; i<9-j; i++) { if(a[i]>a[i+1]) { // 交换代码... flag = 0; } } if(flag) break; } ``` [^2] ### 综合应用题 5. **学生成绩管理系统** ```c // 要求: // 1. 存储5个学生的3门课成绩 // 2. 计算每个学生的总分 // 3. 按总分排序输出 // 4. 查找指定学生的成绩 ``` 涉及知识点:二维数组、排序算法、查找算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值