关注
第一题解答:笔试的时候,没有解答出来,考试后想的,复杂度为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];
}
}
点赞
相关推荐
点赞 评论 收藏
分享
2025-12-30 17:58
Conservatoire National Supérieur Musique et Dance de Lyon Java 喵_coding:项目太烂了外卖+点评啊 而且寒假实习差不多到时候了 hc没多少了 要实在想要找那只能投投大厂试试了
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 程序员找工作至少要刷多少题? #
2421次浏览 41人参与
# 为了减少AI幻觉,你注入过哪些设定? #
588次浏览 20人参与
# 关于春招/暑期实习,你想知道哪些信息? #
1507次浏览 30人参与
# 一张图晒一下你的AI员工 #
826次浏览 29人参与
# 我现在比当时_,你想录用我吗 #
1356次浏览 25人参与
# 论秋招对个人心气的改变 #
1280次浏览 28人参与
# 刚入职的你踩过哪些坑 #
1030次浏览 21人参与
# AI Coding的使用心得 #
849次浏览 25人参与
# 程序员能干到多少岁? #
1748次浏览 35人参与
# 软开人,秋招你打算投哪些公司呢 #
179140次浏览 1365人参与
# 牛客AI体验站 #
723次浏览 26人参与
# 实习,不懂就问 #
160712次浏览 1429人参与
# 帆软软件工作体验 #
11939次浏览 60人参与
# 晒晒你司的新年福利 #
1677次浏览 29人参与
# 双非能在秋招上岸吗? #
371781次浏览 1864人参与
# 国企秋招,你投了吗? #
59107次浏览 378人参与
# 投格力的你,拿到offer了吗? #
169328次浏览 869人参与
# 作业帮求职进展汇总 #
98559次浏览 600人参与
# 暑假倒计时,你都干了些啥? #
39656次浏览 207人参与
# 牛客吐槽大会 #
15435次浏览 229人参与