【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;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章