关注
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
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你的秋招白月光和意难平公司 #
25264次浏览 213人参与
# 机械人晒出你的简历 #
140599次浏览 865人参与
# 你想跟着什么样领导? #
17097次浏览 157人参与
# 比亚迪求职进展汇总 #
816382次浏览 3142人参与
# 十一月总结 #
29629次浏览 271人参与
# 职场上哪些事情令人讨厌 #
28824次浏览 117人参与
# 深信服求职进展汇总 #
238972次浏览 1803人参与
# 如果今天是你的last day,你会怎么度过? #
54950次浏览 311人参与
# 考研失败就一定是坏事吗? #
154344次浏览 1091人参与
# 机械人还在等华为开奖吗? #
283810次浏览 1447人参与
# 什么样的背景能拿SSP? #
121432次浏览 421人参与
# 从夯到拉,评价编程语言 #
13731次浏览 107人参与
# 分享一个让你热爱工作的瞬间 #
50015次浏览 435人参与
# 硬件人秋招进展 #
252283次浏览 3941人参与
# 如何提高实习转正率? #
59105次浏览 416人参与
# 巨人网络工作体验 #
69798次浏览 499人参与
# 应届生进小公司有什么影响吗 #
102927次浏览 1092人参与
# 入职以后才知道的校招谎言 #
106512次浏览 664人参与
# 找实习是选平台还是选业务? #
18000次浏览 197人参与
# 听到哪句话代表面试稳了OR挂了? #
107249次浏览 473人参与
传音控股公司福利 330人发布