前言:线性表的数组描述,在物理空间上连续存储,利用索引随机读取元素。
线性表:也称为有序表,形如(e0,e1,e2...en-1),n为有穷自然数,可以认为e0先于e1,e1先于e2,除了这种先后关系,线性表不再有其他关系。
题目:给定两个有序整数数组nums1和nums2,将它们合并成新的有序数组nums3
算法思路:
从两数组的最左边开始,按位循环比较两个数组的元素,较小的元素放入新数组,且其对应的数组下标加一(较大元素对应的下标不加一),直到某一个下标等于该对应数组长度时退出循环。
此时较短数组已经遍历完毕并全部放入新数组,较长数组还有部分剩余,最后将剩余元素放入新数组即可
/*
* 合并两个有序数组:给定两个有序整数数组nums1和nums2,将它们合并成新的有序数组nums3
*/
public class ArrayMerge1 {
public int[] merge(int[] a,int[] b)
{
int[] array = new int[a.length + b.length];//新数组为两个数组长度之和
int i=0;int j=0,k=0;//数组下标
//从两数组左边开始,按位循环比较,较小元素放入新数组
while(i
/*
* 整数数组倒序
*/
public class ArrayReverse
{
public static void main(String[] args)
{
int[] nums= {1,2,3,4,5};
for(int i : nums)
{
System.out.print(i+" ");
}
System.out.println("\n");
nums = ArrayReverse.reverse(nums);
for (int i : nums)
{
System.out.print(i+" ");
}
}
public static int[] reverse(int[] arr)
{
int[] result = new int[arr.length];
for(int i = 0,j=result.length-1; i < arr.length; i++,j--)
{
result[j] = arr[i];
}
return result;
}
}
题目:给定一个数组,然找到数组里第一个重复的数字。
例如,如果输入长度为7的数组{1,5,3,6,8,3,5,2,9,5,6,3},那么对应的输出是第一个重复的数字5。
算法思想:
存储在一个整数组dp中,以给定数组元素为下标i,如果dp[i]累加超过1,则判定i为重复数字
/**
*
* @author 何哥
*
* 找出数组中第一个重复的数字:
* 例如,如果输入长度为7的数组{1,5,3,6,8,3,5,2,9,5,6,3},那么对应的输出是第一个重复的数字5。
*
*/
public class DuplicateCheckArray2
{
public int dpChecking(int[] arr) {
int[] dp = new int[arr.length];
for(int i=0;i
/**
* @author 何哥
*
* 找到数组中第一个不重复的整数
*
*/
public class NO {
public int find(int[] arr) {
int[] temp = new int[arr.length];
//给每个元素的出现次数进行累加
for(int num:arr)
temp[num]++;
for(int value:arr)
{
//返回第一个只出现一次的整数
if(temp[value]==1)
return value;
}
return 0;
}
}