6090. 极大极小游戏


实现思路比较简单,递归
class Solution {public int minMaxGame(int[] nums) {int n = nums.length;if (n == 0) return 0;//只有一个数字if (n == 1) return nums[0];//两个数字只比较一次int[] newNum = new int[n / 2];for (int i = 0; i < n / 2; i++) {newNum[i] = (i % 2 == 0) ? Math.min(nums[2 * i], nums[2 * i + 1]) : Math.max(nums[2 * i], nums[2 * i + 1]);}return minMaxGame(newNum);//再返回方法}}
6091. 划分数组使最大差为 K


该数组里的最大值减去最小值小于等于K即为一个子序列,如果与任意数相减都大于K,子序列只有其本身。
class Solution {public int partitionArray(int[] nums, int k) {Arrays.sort(nums);int num=0;for(int i=0;i<nums.length-1){for(int j=1;j<nums.length;j++){if((nums[j]-nums[i])<=k){i++;}else{num++;}i++;}}return num;}}
思路是将要通过两层for循环来遍历,即比较后边的数字比前边的数字是否大于2,大于2就统计一个子序列,但是一直没能使用for循环赋值的思想。可以将排序后的最小值赋给min,如果统计完一个子序列就把子序列的下一个数赋值给min,并统计,因为num始终是大于1的。
class Solution {public int partitionArray(int[] nums, int k) {Arrays.sort(nums);int n = nums.length;if (n == 0) return 1;if (n == 1) return 1;int num=1;int min=nums[0];for(int i=0;i<n;i++){if(nums[i]-min>k){num++;min =nums[i];}}return num;}
