数组
1线性表基础
线性表就是具有相同特征数据元素的一个有限序列
分类
-
语言实现
-
一体式
-
分离式
-
-
存储
-
顺序型
-
链表型
-
-
访问权限
-
栈和队列又称为访问受限的线性表,插入和删除受到了限制,只能在固定的位置进行。而Hash比较特殊,其内部真正存储数据一般是数组,但是访问是通过映射来实现的
-
-
扩容
-
扩充的两种策略:
-
第一种:每次扩充增加固定数目的存储位置,如每次扩充增加10个元素位置,这种策略可称为线性增长。特点:节省空间,但是扩充操作频繁,操作次数多。
-
第二种:每次扩充容量加倍,如每次扩充增加一倍存储空间。特点:减少了扩充操作的执行次数,但可能会浪费空间资源。以空间换时间,推荐的方式。
-
-
增加一个元素
public class Insert { public static void main(String[] args) { int[] arr={1,2,4,7,0}; int res=Insert(arr,4,3); System.out.println(res); } public static int Insert(int[] a,int size,int elem){ if(size>=a.length){ //size=a.length 下标从1开始 return -1; } int index=size; //index不可能为size for(int i=0;i<a.length;i++){ if(elem<a[i]){ index=i; break; } } for(int j=size;j>index;j--){ a[j]=a[j-1]; } a[index]=elem; //插入数据 return index; } } //一边移动一边找 public static int Insert(int[] a,int size,int elem){ if(size>=a.length){ //size=a.length 下标从1开始 return -1; } int index=size; //index不可能为size for(int i=size;i>0;i--){ if(a[i-1]>elem){ a[i]=a[i-1]; } else { index=i; a[i] = elem; break; } } return index; }
删除
public static int remove(int[] a, int size, int key){ int index=-1; for(int i=0;i<size;i++){ if(a[i]==key){ index=i; break; } } if(index!=-1){ for(int i=index+1;i<size;i++){ a[i-1]=a[i]; } size--; } return size; }
单调数组
public boolean isMonotonic(int[] nums) { boolean flag1=true,flag2=true; for(int i=0;i<nums.length-1;i++){ if(nums[i]<nums[i+1]) //降序 flag1=false; if(nums[i]>nums[i+1]) //升序 flag2=false; } return flag1||flag2; }
数组合并
public void merge(int[] nums1, int m, int[] nums2, int n) { int k=m+n-1; int l1=m-1; int l2=n-1; while(l1>=0&&l2>=0){ if(nums1[l1]>=nums2[l2]){ nums1[k--]=nums1[l1--]; } else { nums1[k--]=nums2[l2--]; } } while(l1!=-1) nums1[k--]=nums1[l1--]; while(l2!=-1) nums1[k--]=nums2[l2--]; }