package com.circle.algorithm; import java.util.Arrays; /** * Created by keweiyang on 2017/3/1. */ public class ArrayUtil { /** * 给定一个整形数组a,对该数组的值进行置换 * 例如:a=[7,9,30,3],置换后为[3,30,9,7] * 如果 a=[7,9,30,3,4],置换后为【4,3,30,9,7】 * * @param origin */ public void reverseArray(int[] origin) { int first = 0; int last = origin.length - 1; while (first < last) { swap(origin, first, last); first++; last--; } } private void swap(int[] origin, int first, int last) { int temp = origin[last]; origin[last] = origin[first]; origin[first] = 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 int[] removeZero(int[] oldArray) { int size = 0; for (int i : oldArray) { if (i != 0) { size++; } } int[] newArray = new int[size]; int currentIndex = 0; for (int i : oldArray) { if (i != 0) { newArray[currentIndex++] = i; } } 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 int[] fibonacci(int max) { int[] array = new int[max]; int i = 1; while (max > fun(i)) { array[i] = fun(i); i++; } return removeZero(array); } private int fun(int i) { if (i == 1 || i == 2) { return 1; } return fun(i - 1) + fun(i - 2); } /** * 返回小于给定最大值max的所有素数(质数)数组 * 例如max=23,返回的数组为[2,3,5,7,11,13,17,19] * * @param max * @return */ public int[] getPrimes(int max) { int[] arr = new int[max]; int k = 0; if (max < 2) { return null; } else { for (int i = 2; i < max; i++) { boolean flag = false; int j = i-1; while (j > 1) { if (i % j == 0) { flag = true; break; } j--; } if (!flag) { arr[k++] = i; } } } /* for (int i : arr) { System.out.println(i); }*/ return removeZero(arr); } /** * 用seperator把数组array给连接起来 * 例如array=[3,8,9],seperator="-" * 则返回值为"3-8-9" * * @param array * @param seperator * @return */ public String join(int[] array, String seperator) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < array.length; i++) { builder.append(array[i]); builder.append(seperator); } builder.deleteCharAt(builder.length() - 1); return builder.toString(); } }