Array算法题详细解析
数组相关的算法题目是比较高频的,通过本文希望能够对你数组相关的算法能力有所帮助。
找出给定数组中的最大和最小元素
问题描述:
给你一个数字数组。你需要在数组中找到最小和最大的数。
思路:
- 定义两个变量max,min,用来存放最大和最小元素
- 遍历数组
- 如果当前元素大于max,则将当前元素赋值给max
- 如果当前元素小于min,则将当前元素赋值给min
- 最后max和min则是最大和最小的元素
代码实现:
public class FindLargestSmallestNumberMain {
public static void main(String[] args) {
int arr[] = new int[]{12,56,76,89,100,343,21,234};
//将第一个元素赋值给
int min = arr[0];
int max = arr[0];
for(int i=1; i< arr.length; i++)
{
if(arr[i] > max)
max = arr[i];
else if (arr[i] < min)
min = arr[i];
}
System.out.println("Smallest Number is : " + min);
System.out.println("max Number is : " + max);
}
}
复制代码
查找数组中缺少的数字
问题描述:
给定一个包含1到n的整数递增数组,但数组中从1到n的一个数字缺失了。你需要提供一个最佳的解决方案来找到丢失的数字。数字不会在数组中重复。
例如:
int[] arr1={7,5,6,1,4,2};
Missing number : 3
int[] arr2={5,3,1,2};
Missing number : 4
复制代码
思路:
- 因为数组中元素是递增的,所以可以使用公式
n=n*(n+1)/2
求n个数的和 - 计算出给定数组中元素的和
- 使用n个数的和减去数组中元素的和结果便是缺少的数字
代码实现:
public class MissingNumberMain {
public static void main(String[] args) {
int[] arr1={7,5,6,1,4,2};
System.out.println("Missing number from array arr1: "+missingNumber(arr1));
int[] arr2={5,3,1,2};
System.out.println("Missing number from array arr2: "+missingNumber(arr2));
}
public static int missingNumber(int[] arr)
{
int n=arr.length+1;
int sum=n*(n+1)/2;
int restSum=0;
for (int i = 0; i < arr.length; i++) {
restSum+=arr[i];
}
int missingNumber=sum-restSum;
return missingNumber;
}
}
复制代码
从旋转的有序数组中查找元素
问题描述:
给定一个排序和旋转的数组,如下所示:
int arr[]={16,19,21,25,3,5,8,10};
复制代码
该数组是从一个有序数组arr[]={3,5,8,10,16,19,21,25}
旋转后所得。
要求在在O(log n)
时间复杂度的数组中搜索到一个指定元素。
思路:
- 如果直接遍历数组,则时间复杂度为
O(n)
,不符合题目要求; - 因为数组是由有序数组旋转所得,所以在某个下标的之前和之后是有序的;
- 然后按照二分法查找。
算法逻辑:
- 计算出中位下标mid=(low+high)/2;
- 如果arr[mid]等于要查找的数字则返回;
- 如果[low...mid]是有序的;
- 如果要查找的数字在[low...mid],则high=mid-1;
- 如果要查找的数字不在[low...mid],则low=mid+1;
- 如果[mid...high]是有序的;
- 如果要查找的数字在[mid...high],则low=mid+1;
- 如果要查找的数字不在[mid...high],则high=mid-1;
代码实现:
public class SearchElementSortedAndRotatedArrayMain {
public static void main(String[] args) {
int arr[] = {16, 19, 21, 25, 3, 5, 8, 10};
System.out.println("Index of element 5 : " +