中位数问题:
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;
}
}