Java算法

/**
     * 冒泡排序
     */
    static class Q1{
        public static void sort(int[] arr){
            if(arr == null || arr.length == 0){
                return;
            }

            int length = arr.length;

            for (int i = 0; i < length-1; i++) {
                for (int j = 0; j < length-1-i; j++) {
                    if(arr[j] > arr[j+1]){
                        int temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                    }
                }
            }
        }


        public static void main(String[] args) {
            int[] arr = {2,5,7,9,3,2,9,10};

            System.out.println(JSONObject.toJSONString(arr));
            sort(arr);
            System.out.println(JSONObject.toJSONString(arr));

        }

    }

    /**
     * 快速排序
     */
    static class Q2{
        /**
         * @param arr 排序數組
         * @param start 開始位置
         * @param end 結束位置
         */
        public static void quickSort(int[] arr,int start,int end){
            if(start < end){
                int i,j,k;
                i = start;
                j = end;
                k = arr[i];

                while (i < j){
                    while (i < j && arr[j] > k){
                        j--;
                    }
                    if(i < j){
                        arr[i++] = arr[j];
                    }
                    while (i < j && arr[i] < k){
                        i++;
                    }
                    if(i < j){
                        arr[j--] = arr[i];
                    }
                }

                arr[i] = k;
                quickSort(arr,start,i-1);
                quickSort(arr,i+1,end);

            }
        }

        public static void main(String[] args) {
            int[] arr = {12,2,5,7,9,3,2,9,10};

            System.out.println(JSONObject.toJSONString(arr));
            quickSort(arr,0,arr.length-1);
            System.out.println(JSONObject.toJSONString(arr));

        }



    }

    /**
     * 用兩個棧來實現一個隊列,完成隊列的Push和Pop操做
     */
    static class Q3{
        static Stack<Integer> stack1 = new Stack<Integer>();
        static Stack<Integer> stack2 = new Stack<Integer>();

        public static void push(int node) {
            stack1.push(node);
        }

        public static int pop() {
            if(stack1.empty() && stack2.empty()){
                throw new RuntimeException("Queue is empty!");
            }
            if(stack2.empty()){
                while(!stack1.empty()){
                    stack2.push(stack1.pop());
                }
            }
            return stack2.pop();
        }

        public static void main(String[] args) {
            push(1);
            push(2);
            push(3);
            System.out.println(pop());
            System.out.println(pop());
            System.out.println(pop());
        }
    }

    /**
     * 如今要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項爲0)。
     */
    static class Q4{
        public static int Fibonacci(int n) {
            int a=1,b=1,c=0;
            if(n==1||n==2){
                return 1;
            }else{
                for (int i=3;i<=n;i++){
                    c=a+b;
                    a=b;
                    b=c;
                }
                return c;
            }
        }

        public static void main(String[] args) {
            System.out.println(Fibonacci(5));
        }
    }

    /**
     * 數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。
     * 因爲數字2在數組中出現了5次,超過數組長度的一半,所以輸出2。若是不存在則輸出0
     */
    static class Q5{
        public static int MoreThanHalfNum_Solution(int [] array) {
            if(array == null || array.length == 0){
                return 0;
            }

            int count = 0;
            Arrays.sort(array);
            int num = array[array.length / 2];
            for (int i : array) {
                if(num == i){
                    count ++;
                }
            }

            if(count<=(array.length/2)){
                num=0;
            }
            return num;
        }

        public static void main(String[] args) {
            int[] arr = {3,4,5,6,7,5,4,3,4,3,4,3,43,3,3,3,3,3,3,3,3};
            System.out.println(MoreThanHalfNum_Solution(arr));
        }
    }

    /**
     * 在一個字符串(0<=字符串長度<=10000,所有由字母組成)中找到第一個只出現一次的字符,並返回它的位置, 若是沒有則返回 -1(須要區分大小寫).
     */
    static class Q6{
        public static int FirstNotRepeatingChar(String str) {
            for (int i = 0; i < str.length(); i++) {
                if(str.indexOf(String.valueOf(str.charAt(i))) == str.lastIndexOf(String.valueOf(str.charAt(i)))){
                    return i;
                }
            }
            return -1;
        }

        public static void main(String[] args) {
            String a = "aAa";
            System.out.println(FirstNotRepeatingChar(a));
        }
    }
複製代碼
相關文章
相關標籤/搜索