数学之中位数、众数\平方数

 中位数问题:

class Solution {
    public int minMoves2(int[] nums) {
     // /*第一种解法:以每一个元素为目标对象,求出其他的元素距离目标对象的差之和,满足差值和最小的就是移动的最小数
     // 时间复杂度o(n^2)**/
     //    int min=Integer.MAX_VALUE;
     //    int sum=0;
     //    for(int i=0;i<nums.length;i++){
     //        for(int j=0;j<nums.length;j++){
     //            sum=sum+Math.abs(nums[j]-nums[i]);
     //        }
     //        min=Math.min(min,sum);
     //        sum=0;
     //    }
     //    return min;
        
        
        /*最少移动次数即移动到中位数;a,m,b   =(b-a)   =(m-a)+(b-m)*/
        //归并排序o(Nlogn)
        Arrays.sort(nums);
        int move=0;
        int l=0;
        int h=nums.length-1;
        while(l<=h){
            move+=(nums[h]-nums[l]);
            l++;
            h--;
        }
        return move;
        
        //快速排序:o(n)--找到第k个元素--中位数
    }
}

求众数:

class Solution {
    public int majorityElement(int[] nums) {
       
        //o(nlogn)时间
        // Arrays.sort(nums);
        // return nums[nums.length/2];
        
        
        // //o(n)
        int cnt=0;
        int majority=nums[0];
        for(int num:nums){
            majority=(cnt==0)?num:majority;
            cnt=(majority==num)?cnt+1:cnt-1;
        }
        return majority;
    }
}

 

3.完全平方数

class Solution {
    public boolean isPerfectSquare(int num) {
        /*
        * 1,4,9,16,25...
           3 , 5, 7, 9,...
           之差是一个等差数列q=2
        */
        int subNum=1;
        while(num>0){
            num=num-subNum;
            subNum+=2;
        }
        return num==0;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值