package com.coderising.array; import java.util.ArrayList; import java.util.List; public class MyArrayUtils { /** * ����һ����������a , �Ը������ֵ�����û� ���磺 a = [7, 9 , 30, 3] , �û���Ϊ [3, 30, 9,7] ��� a = [7, 9, 30, 3, 4] , �û���Ϊ [4,3, 30 , 9,7] * @param origin * @return */ public static void reverseArray(int[] origin){ if (origin == null) { return; } int temp = 0; for (int i = 0; i < origin.length/2; i++) { temp = origin[i]; origin[i] = origin[origin.length - 1 - i]; origin[origin.length - 1 - i] = temp; } } /** * ���������µ�һ�����飺 int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} * Ҫ������������ֵΪ0����ȥ��������Ϊ0��ֵ����һ���µ����飬���ɵ�������Ϊ�� * {1,3,4,5,6,6,5,4,7,6,7,5} * @param oldArray * @return */ public static int[] removeZero(int[] oldArray){ if (oldArray == null) { return null; } int notZeroLength = oldArray.length; for (int element : oldArray) { if (element == 0) { notZeroLength--; } } if (notZeroLength == 0) { return new int[0]; } int[] newArray = new int[notZeroLength]; for (int i = 0,index = 0; i < oldArray.length; i++) { if (oldArray[i] != 0) { newArray[index++] = oldArray[i]; } } return newArray; } /** * ���������Ѿ�����õ��������飬 a1��a2 , ����һ���µ�����a3, ʹ��a3 ����a1��a2 ������Ԫ�أ� ������Ȼ������� * ���� a1 = [3, 5, 7,8] a2 = [4, 5, 6,7] �� a3 Ϊ[3,4,5,6,7,8] , ע�⣺ �Ѿ��������ظ� * @param array1 * @param array2 * @return */ public static int[] merge(int[] array1, int[] array2){ if (array1 == null && array2 == null) { return null; } int[] newArray; if (array1 == null) { newArray = new int[array2.length]; System.arraycopy(array2, 0, newArray, 0, array2.length); return newArray; } if (array2 == null) { newArray = new int[array1.length]; System.arraycopy(array1, 0, newArray, 0, array1.length); return newArray; } newArray = new int[array1.length + array2.length]; int i = 0; int j = 0; int k = 0; for (; i < array1.length && j < array2.length;) { if (array1[i] < array2[j]) { newArray[k++] = array1[i++]; } else if (array1[i] == array2[j]) { newArray[k++] = array1[i++]; j++; } else { newArray[k++] = array2[j++]; } } if (i == array1.length) { System.arraycopy(array2, j, newArray, k, array2.length - j); k += array2.length - j; } if (j == array2.length) { System.arraycopy(array1, i, newArray, k, array1.length - i); k += array1.length - i; } int[] results = new int[k]; System.arraycopy(newArray, 0, results, 0, k); return results; } /** * ��һ���Ѿ��������ݵ����� oldArray������������չ�� ��չ��������ݴ�СΪoldArray.length + size * ע�⣬�������Ԫ��������������Ҫ���� * ���� oldArray = [2,3,6] , size = 3,�򷵻ص�������Ϊ * [2,3,6,0,0,0] * @param oldArray * @param size * @return */ public static int[] grow(int [] oldArray, int size){ if (size <= 0 || oldArray == null) { return oldArray; } int[] newArray = new int[oldArray.length + size]; System.arraycopy(oldArray, 0, newArray, 0, oldArray.length); return newArray; } /** * 쳲���������Ϊ��1��1��2��3��5��8��13��21...... ������һ�����ֵ�� ����С�ڸ�ֵ������ * ���磬 max = 15 , �򷵻ص�����Ӧ��Ϊ [1��1��2��3��5��8��13] * max = 1, �򷵻ؿ����� [] * @param max * @return */ public static int[] fibonacci(int max){ if (max <= 1) { return new int[0]; } List<Integer> list = new ArrayList<Integer>(); int temp = 0; for (int i = 0; ; i++) { if ((temp = getfibonacci(i + 1)) < max) { list.add(temp); } else { break; } } return List2Array(list); } private static int getfibonacci(int i){ if (i <= 2) { return 1; } return getfibonacci(i-2) + getfibonacci(i-1); } /** * ����С�ڸ������ֵmax�������������� * ����max = 23, ���ص�����Ϊ[2,3,5,7,11,13,17,19] * @param max * @return */ public static int[] getPrimes(int max){ if (max <= 2) { return new int[0]; } List<Integer> primeList = new ArrayList<Integer>(); primeList.add(2); for (int i = 3; i < max; i += 2) { int j; for (j = 2; j <= Math.ceil(Math.sqrt(i)); j++) { if (i % j == 0) { break; } } if (j == Math.ceil(Math.sqrt(i)) + 1) { primeList.add(i); } } return List2Array(primeList); } private static int[] List2Array(List<Integer> list) { int[] results = new int[list.size()]; for (int i = 0; i < list.size(); i++) { results[i] = list.get(i); } return results; } /** * ��ν���������� ��ָ�����ǡ�õ�����������֮�ͣ�����6=1+2+3 * ����һ�����ֵmax�� ����һ�����飬 ��������С��max ���������� * @param max * @return */ public static int[] getPerfectNumbers(int max){ if (max < 2) { return new int[0]; } List<Integer> PerfectList = new ArrayList<Integer>(); for (int i = 1; i < max; i++) { int factorSum = 0; int j; for ( j= 1; j < i; j++) { if (i % j == 0) { factorSum += j; } if (factorSum > i) { break; } } if (j == i && factorSum == i) { PerfectList.add(i); } } return List2Array(PerfectList); } /** * ��seperator ������ array���������� * ����array= [3,8,9], seperator = "-" * �򷵻�ֵΪ"3-8-9" * @param array * @param seperator * @return */ public static String join(int[] array, String seperator){ if (array == null || array.length < 1) { return ""; } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(array[0]); for (int i = 1; i < array.length; i++) { stringBuilder.append(seperator).append(array[i]); } return stringBuilder.toString(); } }