【Leetcode】- 第 29 场双周赛

5432. 去掉最低工资和最高工资后的工资平均值

在这里插入图片描述

遍历数组,求出最大值和最小值,用(sum(数组之和)- max - min)/ 数组的长度-2

代码

class Solution {
   public double average(int[] salary) {
		double sum = 0;
		double max = salary[0];
		double min = salary[0];
		for (int i = 0; i < salary.length; i++) {
			if (max < salary[i]) {
				max = salary[i];
			}
			if (min > salary[i]) {
				min = salary[i];
			}
			sum = sum + salary[i];
		}
		double ave = (sum - max - min) / (salary.length - 2);
		return ave;
	}
}

5433. n 的第 k 个因子

在这里插入图片描述
直接暴力循环,将(n%i==0)的值存入数组中,最后用数组的长度和K来进行判断

代码

class Solution {
   public int kthFactor(int n, int k) {
		int[] array = new int[n];
		int num = 0;
		for (int i = 1; i <= n; i++) {
			if (n % i == 0) {
				array[num++] = i;
			}
		}
		if (num < k) {
			return -1;
		} else {
			return array[k - 1];
		}
	}
}

5434. 删掉一个元素以后全为 1 的最长子数组

在这里插入图片描述

正顺序遍历一遍数组,求出每个元素前面有多少个1
倒顺序遍历一遍数组,求出每个元素后面有多少个1
用Math,max()函数求出删除改元素,前面+后面的1,最后返回max

代码

public static int longestSubarray(int[] nums) {
		int[] array1 = new int[nums.length];
		int[] array2 = new int[nums.length];
		array1[0] = nums[0];
		for (int i = 1; i < nums.length; i++) {
			if (nums[i] == 1) {
				array1[i] = array1[i - 1] + 1;
			} else {
				array1[i] = 0;
			}
		}
		array2[nums.length - 1] = nums[nums.length - 1];
		for (int i = nums.length - 2; i >= 0; i--) {
			if (nums[i] == 1) {
				array2[i] = array2[i + 1] + 1;
			} else {
				array2[i] = 0;
			}
		}
		int max = 0 + array2[1];
		for (int i = 1; i < nums.length - 1; i++) {
			max = Math.max(max, array1[i - 1] + array2[i + 1]);
		}
		max = Math.max(max, array1[nums[nums.length - 1]] + 0);
		System.out.println(max);
		return max;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章