数据结构基础1:数组

前言:线性表的数组描述,在物理空间上连续存储,利用索引随机读取元素。

线性表:也称为有序表,形如(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;
	}

}

 

 

 

 

 

你可能感兴趣的:(数据结构与算法)