力扣---2020.3.31

912. 排序数组

class Solution {
    public int[] sortArray(int[] nums) {
        Arrays.sort(nums);
        return nums;  
    }
}
class Solution {
    public int[] sortArray(int[] nums) {
        //qSort(nums,0,nums.length-1); 快速排序  执行用时 : 5 ms        内存消耗 :  47.3 MB
        //selectSort(nums);            选择排序  执行用时 : 2097 ms     内存消耗 :  47.4 MB
        //insertSort(nums);            插入排序  执行用时 : 748 ms      内存消耗 :  47.7 MB

        return nums;
    }
    /*快速排序*/
    void qSort(int[] arr,int left,int right){
        int l=left,r=right;
        if(l<r){
            int temp = arr[l];
            while(l<r){
                while(l<r && arr[r] >= temp) r--;
                if(l<r) arr[l] = arr[r];
                while(l<r && arr[l] < temp) l++;
                if(l<r) arr[r] = arr[l];
            }
            arr[l] = temp;
            qSort(arr,left,l);
            qSort(arr,l+1,right);
        }
    }
    /*选择排序*/
    void selectSort(int[] arr){
        int min;
        for(int i=0;i<arr.length;i++){
            min = i;
            for(int j=i;j<arr.length;j++){
                if(arr[j]<arr[min]){
                    min = j;
                }
            }
            if(min != i){
                int temp = arr[i];
                arr[i] = arr[min];
                arr[min] = temp;
            }
        }
    }
    /*插入排序*/
    void insertSort(int arr[]){
        for(int i=1;i<arr.length;i++){
            int res = arr[i];
            for(int j=i-1;j>=0;j--){
                if(res<arr[j]){
                    arr[j+1] =arr[j];
                    arr[j] = res;
                }else{
                    break;
                }
            }
        }
    }
}

面试题53 - I. 在排序数组中查找数字 I

class Solution {
    public int search(int[] nums, int target) {
        int count = 0;
        for(int i=0;i<nums.length;i++){
            if(target==nums[i]){
                count++;
            }
            if(target<nums[i]){
                break;
            }
        }
        return count;
    }
}
class Solution {
    public int search(int[] nums, int target) {
        int l=0,r=nums.length-1;
        int count=0;
        while(l<r){
            int mid = (l+r)/2;
            if(nums[mid]>=target){
                r = mid;
            }
            if(nums[mid]<target){
                l = mid+1;
            }
        }
        while(l<nums.length&&nums[l++]==target){
            count++;
        }
        return count;
    }
}

面试题53 - II. 0~n-1中缺失的数字

class Solution {
    public int missingNumber(int[] nums) {
        for(int i=0;i<nums.length;i++){
            if(nums[i]!=i){
                return i;
            }
        }
        return nums.length;
    }
}
//位运算
class Solution {
    public int missingNumber(int[] nums) {
        int n = nums.length;
        for(int i=0;i<nums.length;i++){
            n ^= nums[i];
            n ^= i;
        }
        return n;
    }
}
//二分
class Solution {
    public int missingNumber(int[] nums) {
        int l = 0,r = nums.length-1;
        while(l<=r){
            int mid = (l+r)/2;
            if(nums[mid]==mid){
                l = mid+1;
            }else{
                r = mid-1;
            }
        }
        return l;
    }
}
//等差数列求和 Sn=n(a1+an)/2
class Solution {
    public int missingNumber(int[] nums) {
        int sum = 0,Sn = 0;
        int n = nums.length;
        for(int i=0;i<n;i++){
            sum += nums[i];
        }
        Sn = n*(1+n)/2;
        return Sn-sum;
    }
}

你知道的越多,你不知道的越多。
有道无术,术尚可求,有术无道,止于术。
如有其它问题,欢迎大家留言,我们一起讨论,一起学习,一起进步

发布了231 篇原创文章 · 获赞 281 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_40722827/article/details/105231112