数组

  • 1.实现一个支持动态扩容的数组
    基本思路:当元素数量等于数组大小时,如果继续添加元素,则将数组容量扩大为原来的两倍;如果元素个数达到数组容量的1/4时,将数组容量收缩为原来的1/2。
public class ResizingArray<Integer>{
	private int[] a = new int[];
	private N = 0;
	private void resize(int max){
		int [] temp = new int[max];
		for(int i = 0; i < N; i++)
			temp[i] = a[i];
		a = temp;
	}
	public void push(int item){
		if(N == a.length)
			resize(2*a.length);
		a[N++] = item;
	}
	public int pop(){
		int item = a[--N];
		a[N] = null;
		if(N > 0 && N == a.length/4)
			resize(a.length/2);
		return item;
	}
}
  • 2.实现一个大小固定的有序数组,支持动态增删改操作
    基本思路:新建一个有序的大小固定的数组,删除一个数据时,可以使用二分查找,找到对应的位置,删除之后,将后边的数据按顺序前移一个位置;增加一个元素的时候,比较增加的元素是否比原数组中的边界值大或者小,如果增加的数据在区间范围内,则删除对应方向的边界值(方向按照要求选取),找到对应的位置之后,先将目标位置后边数据后移一个位置,留出空位,然后插入对应的数据;
  • 3.实现两个有序数组合并为一个有序数组
    代码:
public class MergeTwoSortedArrays {
	public static int[] merge(int[] a, int[] b) {
		if(a == null)
			return b;
		if(b == null)
			return a;
		int len_a = a.length;
		int len_b = b.length;
		int[] c = new int[len_a + len_b];
		int i = 0, j = 0, k = 0;//分别代表数组a ,b , c 的索引
		while (i < len_a && j < len_b) {
			if (a[i] < b[j])
				c[k++] = a[i++];
			else
				c[k++] = b[j++];
		}
		while (i < len_a)
			c[k++] = a[i++];
		while (j < len_b)
			c[k++] = b[j++];
		return c;
	}
}

Leetcode 1.Two Sum
LeetCode 15.Three Sum
LeetCode 169. Majority Element

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值