关注
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
相关推荐
04-25 16:05
北京林业大学 电子信息类 点赞 评论 收藏
转发
点赞 评论 收藏
转发
牛客热帖
正在热议
# 牛友的五一计划 #
9355次浏览 212人参与
# 如何看待offer收割机的行为 #
192445次浏览 2970人参与
# 牛客帮帮团来啦!有问必答 #
390754次浏览 7733人参与
# 无实习如何秋招上岸 #
171446次浏览 2709人参与
# 如何一边实习一边秋招 #
200191次浏览 3981人参与
# 春招别灰心,我们一人来一句鼓励 #
20671次浏览 304人参与
# 非技术岗薪资爆料 #
7605次浏览 151人参与
# 硬件人的春招flag #
14482次浏览 199人参与
# 晒一晒我的offer #
2812670次浏览 49814人参与
# 在国企工作的人,躺平了吗? #
72292次浏览 876人参与
# 来聊聊机械薪资天花板是哪家 #
21814次浏览 172人参与
# 机械人,你的秋招第一份简历被谁挂了 #
26845次浏览 491人参与
# 第一次面试 #
16198次浏览 245人参与
# 你更愿意参加线上面试还是线下面试? #
6761次浏览 93人参与
# 华为求职进展汇总 #
440469次浏览 4423人参与
# 女生做医疗销售有前景吗 #
3811次浏览 48人参与
# 简历中的项目经历要怎么写 #
379582次浏览 6385人参与
# 通信硬件薪资爆料 #
146684次浏览 1107人参与
# 产品实习,你更倾向大公司or小公司 #
31126次浏览 489人参与
# 机械人的薪资开到多少,才适合去? #
44812次浏览 267人参与