关注
package LeetCode.ByteDance;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @Author :FANG MIAO
* @Date :Created on 2020/2/5 15:26
* @Description:寻找前k个递增序列
* 输入:[2,1,4,5,8,3,7,10,2,5] k=2
* 输出:[1,4,5,8],[3,7,10]
*/
public class TopKLenArray {
public static List<List<Integer>> topKArray(int[] arr, int k) {
if (k == 0)
return new ArrayList<>();
int[] dp = new int[arr.length];
Arrays.fill(dp, 1);
for (int i = 1; i < arr.length; i++) {
if (arr[i] > arr[i - 1])
dp[i] = dp[i - 1] + 1;
}
List<List<Integer>> res = new ArrayList<>();
//找最大的前k个子数组
for (int i = 0; i < k; i++) {
//找当前最大值
int maxIndex = 0;
for (int j = 0; j < dp.length; j++) {
if (dp[j] > dp[maxIndex]) {
maxIndex = j;
}
}
int len = dp[maxIndex];//最长数组的长度
List<Integer> curArr = new ArrayList<>();
for (int j = maxIndex - len + 1; j <= maxIndex ; j++) {
curArr.add(arr[j]);
dp[j] = 1;//将这里重置,要不然后面的循环会有问题
}
res.add(new ArrayList<>(curArr));
}
return res;
}
public static void main(String[] args) {
int[] arr = {2,1,4,5,8,3,7,10,2,5};
List<List<Integer>> res = topKArray(arr, 2);
for (List<Integer> l:
res) {
for (int num:
l) {
System.out.print(num);
System.out.print(" ");
}
System.out.println();
}
}
}
楼主这题可以用dp哈。看来字节比较喜欢考dp和backtrack。 另外问一下楼主知道是哪里没有答好导致没通过吗? 谢谢~
查看原帖
2 8
相关推荐
点赞 评论 收藏
分享
_世界和平:可以偷偷吃肉,但是不要在饥饿的人面前一边吃肉一边吧唧嘴还嫌肉不好吃 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 春招什么时候投? #
9076次浏览 154人参与
# 今年秋招你收到了多少封邮件? #
37152次浏览 272人参与
# 春节前,你还在投简历吗? #
12432次浏览 146人参与
# 牛友的春节生活 #
5871次浏览 136人参与
# 牛客AI体验站 #
14442次浏览 266人参与
# 春节提前走,你用什么理由请假? #
8653次浏览 210人参与
# 实习到现在,你最困惑的一个问题 #
3787次浏览 112人参与
# 从夯到拉,锐评职场mentor #
4097次浏览 64人参与
# 备战春招/暑实,现在应该做什么? #
3886次浏览 131人参与
# 距离春招还有一个月,你现在是什么开局? #
5752次浏览 106人参与
# AI“智障”时刻 #
25775次浏览 128人参与
# 聊聊Agent开发 #
22619次浏览 564人参与
# 机械人的offer怎么选 #
250190次浏览 1186人参与
# 暑期实习什么时候投? #
6209次浏览 150人参与
# 推荐一个值得做的AI项目 #
6072次浏览 166人参与
# 实习生应该准时下班吗 #
335604次浏览 1737人参与
# 我的AI电子员工 #
27998次浏览 190人参与
# 非技术岗薪资爆料 #
487679次浏览 3039人参与
# 腾讯工作体验 #
568994次浏览 3718人参与
# 用一句话形容你的团队氛围 #
38909次浏览 284人参与
OPPO公司福利 1195人发布
查看20道真题和解析