第一题
题目
给你两个非负整数 low
和 high
。请你返回 **low
**和 **high
**之间(包括二者)奇数的数目。
思路
分为三种情况
1、low和high都是奇数的情况,结果等于(high-low)/2 + 1
2、low和hign都是偶数的情况,(high-low)/2
3、low和hign一奇一偶的情况,(high-low)/2 + 1
可以额外注意一下low和high相等的情况,但是会发现low和high相等的情况,符合(high-low)/2 + 1
,所以代码只要额外提出来(high-low)/2
的情况,剩余else
就可以了。
代码
public int countOdds(int low, int high) {
int num = high -low;
int res = num/2;
if(num % 2 == 0 && high%2 == 0) {
return res;
}else {
res++;
}
return res;
}
第二题
题目
给你一个整数数组 salary
,数组里每个数都是 唯一 的,其中 salary[i]
是第 i
个员工的工资。
请你返回去掉最低工资和最高工资以后,剩下员工工资的平均值
思路
遍历,取出最大值,最小值,然后进行计算,这里注意一下,sum/n
,要先转换为double再进行计算,否则,会自动为int类型
代码
public double average(int[] salary) {
int minPri = salary[0];
int maxPri = salary[0];
int sum = 0;
for(int i = 0; i < salary.length; i++) {
sum+=salary[i];
if(salary[i] < minPri) {
minPri = salary[i];
}else if(salary[i] > maxPri) {
maxPri = salary[i];
}
}
sum = sum - minPri - maxPri;
double res = (double)((double)sum/(double)(salary.length - 2));
return res;
}
第三题
题目
给定一个大小为 n
**的数组 nums
,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素
思路
排序,然后遍历查找,当然,第一印象是使用哈希,本次使用排序,哈希有时间补充
代码
public int majorityElement(int[] nums) {
if(nums.length == 1) {return nums[0];};
Arrays.sort(nums);
int res = nums[0];
int resCopy = nums[0];
int time = 0;
int timeCopy = 0;
for(int i = 0; i < nums.length; i++) {
if(i == nums.length -1 && resCopy == nums[i-1]) {
timeCopy++;
}
if(timeCopy > time) {
time = timeCopy;
res = nums[i-1];
};
if(resCopy == nums[i]) {
timeCopy++;
}else {
timeCopy = 1;
};
resCopy = nums[i];
};
return res;
}