第一题解答:笔试的时候,没有解答出来,考试后想的,复杂度为n^2,可能过高,大佬们有更好的解答嘛,欢迎留言, 思路: 1.先排序 数组变成[1,2,2,3,5] 2. 因为不知道要删除左边,还是右边才能最少,所以采用dp * dp[i][j] 表示数组(从i到j)至少要删除多少元素才能达标, * dp递推关系式为 dp[i][j] = min(dp[i][j-1], dp[i+1][j])+1; * 然后采用一个数组记录中间计算过的值,避免重复计算, * time n^2 * space n^2 package meiTuan; import java.util.Arrays; import java.util.Scanner; public class Main1After { static int[] arr; static int len; static int k; static int[][] dp; public static void main(String[] args) { Scanner sc = new Scanner(System.in); len = sc.nextInt(); k = sc.nextInt(); arr = new int[len]; dp = new int[len][len]; for(int i=0;i<len;i++) arr[i] = sc.nextInt(); Arrays.sort(arr); for (int i=0;i<arr.length;i++){ for (int j=0;j<arr.length;j++){ if (i != j) dp[i][j] = -1; } } System.out.println(minRemove(0,len-1)); for (int[] k: dp) System.out.println(Arrays.toString(k)); } public static int minRemove(int i, int j){ if (arr[j]-arr[i]<=k) return 0; if (dp[i][j] != -1) return dp[i][j]; dp[i][j] = Math.min(minRemove(i+1,j),minRemove(i,j-1))+1; return dp[i][j]; } }
点赞

相关推荐

喵_coding:项目太烂了外卖+点评啊 而且寒假实习差不多到时候了 hc没多少了 要实在想要找那只能投投大厂试试了
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务