发表于: 2017-05-27 22:36:16

1 1311


今天完成的事情:

1. 今天几乎没有做什么事情,上午看了看拉勾网上的招聘信息,嗯差距还是有的。jvm的东西还没看过,要看一看这块。


2. 做了一些数据结构的练习题,关于数组的:回文,去除特定数字,裴波那契,素数、完数。

把代码贴一下把,要不东西太少了。

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

     * @return

     */

    public void reverseArray(int[] origin){

        if (origin == null) {

            throw new IllegalArgumentException();

        }

        int temp = 0;

        for (int i=0; i<origin.length/2; i++){

            temp = origin[i];

            int j = origin.length-1-i;

            origin[i] = origin[j];

            origin[j] = temp;

        }

    }

    /*public static void main(String[] args) {

        ArrayUtil arrayUtil = new ArrayUtil();

        int[] a = new int[]{};

        arrayUtil.reverseArray(a);

        System.out.println(Arrays.toString(a));

    }*/

    /**

     * 现在有如下的一个数组:   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){

        if (oldArray == null){

            throw  new IllegalArgumentException();

        }

        //int newLength = 0;

        /*for (int i = 0; i < oldArray.length; i++) {

            if (oldArray[i] != 0){

                newLength++;

            }

        }*/

        int[] newArray = new int[oldArray.length];

        int j = 0;

        for (int i = 0; i < oldArray.length; i++) {

            if (oldArray[i] == 0){

                continue;

            }else {

                newArray[j++] = oldArray[i];

            }

        }

        return Arrays.copyOf(newArray,j);

        //return newArray;

    }

   /* public static void main(String[] args) {

        ArrayUtil arrayUtil = new ArrayUtil();

        int[] removeZero = arrayUtil.removeZero(new int[]{1,2,3,0,0,1});

        System.out.println(Arrays.toString(removeZero));

    }*/

    /**

     * 给定两个已经排序好的整形数组, 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 int[] merge(int[] array1, int[] array2){

        int index1 = 0;

        int index2 = 0;

        int index3 = 0;

        int[] allArray = new int[10];

        for (int i = 0; i < array1.length; i++) {

            if (array1[index1] < array2[index2]){

                allArray[index3++] = array1[index1];

                index1++;

            }else if (array1[index1] == array2[index2]){

                allArray[index3++] = array1[index1];

                index1++;

                index2++;

            }else {

                allArray[index3++] = array1[index2];

                index2++;

            }

        }

        return  null;

    }

    /**

     * 把一个已经存满数据的数组 oldArray的容量进行扩展, 扩展后的新数据大小为oldArray.length + size

     * 注意,老数组的元素在新数组中需要保持

     * 例如 oldArray = [2,3,6] , size = 3,则返回的新数组为

     * [2,3,6,0,0,0]

     * @param oldArray

     * @param size

     * @return

     */

    public int[] grow(int [] oldArray,  int size){

        if (oldArray == null){

            throw new IllegalArgumentException();

        }

        if (size == 0){

            return oldArray;

        }

        int length = oldArray.length + size;

        int[] newArray = new int[length];

        for (int i = 0; i < length; i++) {

            if (i < oldArray.length){

                newArray[i] = oldArray[i];

            }else {

                newArray[i] = 0;

            }

        }

        return newArray;

    }

   /* public static void main(String[] args) {

        ArrayUtil arrayUtil = new ArrayUtil();

        int[] grow = arrayUtil.grow(new int[]{1, 2, 3}, 0);

        System.out.println(Arrays.toString(grow));

    }*/

    /**

     * 斐波那契数列为: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){

        if (max < 0){

            throw new IllegalArgumentException();

        }else if (max == 1){

            return new int[0];

        }

        ArrayList<Integer> arrayList = new ArrayList<>();

        arrayList.add(1);

        arrayList.add(1);

        int i = 0;

        while (true){

            int num = arrayList.get(i) + arrayList.get(i+1);

            if (num < max){

                arrayList.add(num);

            }else {

                break;

            }

            i++;

        }

        int[] arr = new int[arrayList.size()];

        for (int j = 0; j < arrayList.size(); j++) {

            arr[j] = arrayList.get(j);

        }

        return arr;

    }

   /* public static void main(String[] args) {

        ArrayUtil  arrayUtil = new ArrayUtil();

        int[] result =  arrayUtil.fibonacci(1000000000);

        System.out.println(Arrays.toString(result));

    }*/

    /**

     * 返回小于给定最大值max的所有素数数组

     * 例如max = 23, 返回的数组为[2,3,5,7,11,13,17,19]

     * @param max

     * @return

     */

    public int[] getPrimes(int max){

        if (max < 2){

            return new int[0];

        }

        ArrayList<Integer> list = new ArrayList();

        for (int i = 2; i <= max; i++) {

            if (isPrimes(i)){

                list.add(i);

            }

        }

        int[] array = new int[list.size()];

        for (int i = 0; i < list.size(); i++) {

            array[i] = list.get(i);

        }

        return array;

    }

    private static boolean isPrimes(int i){

        if (i == 2){

            return true;

        }

        for (int j = 2; j < i; j++) {

            if (!(i % j == 0)){

                continue;

            }else {

                return false;

            }

        }

        return true;

    }

    /*public static void main(String[] args) {

        ArrayUtil arrayUtil = new ArrayUtil();

        int[] primes = arrayUtil.getPrimes(50);

        System.out.println(Arrays.toString(primes));

    }*/

    /**

     * 所谓“完数”, 是指这个数恰好等于它的因子之和,例如6=1+2+3

     * 给定一个最大值max, 返回一个数组, 数组中是小于max 的所有完数

     * @param max

     * @return

     */

    public int[] getPerfectNumbers(int max){

        if (max < 1){

            return new int[0];

        }else if (max == 1){

            return new int[]{1};

        }

        ArrayList<Integer> list = new ArrayList();

        for (int i = 2; i <= max; i++) {

            if (isPerfectNumbers(i)){

                list.add(i);

            }

        }

        int[] array = new int[list.size()];

        for (int i = 0; i < list.size(); i++) {

            array[i] = list.get(i);

        }

        return array;

    }

    private static boolean isPerfectNumbers(int n){

        int sum = 0;

        for (int i = 1; i <= n/2 ; i++) {

            if (n % i == 0){

                sum += i;

            }else {

                continue;

            }

        }

        if (sum == n){

            return true;

        }else {

            return false;

        }

    }

    public static void main(String[] args) {

        ArrayUtil arrayUtil = new ArrayUtil();

        int[] perfectNumbers = arrayUtil.getPerfectNumbers(50);

        System.out.println(Arrays.toString(perfectNumbers));

    }

    /**

     * 用seperator 把数组 array给连接起来

     * 例如array= [3,8,9], seperator = "-"

     * 则返回值为"3-8-9"

     * @param array

     * @param

     * @return

     */

    public String join(int[] array, String seperator){

        String s = "";

        for (int i = 0; i < array.length-1; i++) {

            s = s + array[i] + seperator;

        }

        s = s + array[array.length-1];

        return s;

    }

    /*public static void main(String[] args) {

        ArrayUtil arrayUtil = new ArrayUtil();

        String join = arrayUtil.join(new int[]{1, 2, 3, 4}, ",");

        System.out.println(join);

    }

*/

}


明天计划的事情:


遇到的问题:


收获:


返回列表 返回列表
评论

    分享到