关注
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
相关推荐
牛客热帖
正在热议
# 25届秋招总结 #
238937次浏览 1951人参与
# 学历or实习经历,哪个更重要 #
40300次浏览 293人参与
# 北方华创开奖 #
22248次浏览 253人参与
# 地方国企笔面经互助 #
2421次浏览 6人参与
# 面试题刺客退退退 #
136391次浏览 2086人参与
# 选完offer后,你后悔学本专业吗 #
9095次浏览 66人参与
# 你最想要的公司福利是? #
38719次浏览 97人参与
# 应届生被毁约被毁意向了怎么办 #
26218次浏览 236人参与
# 机械应届生薪资要多少才合适? #
12244次浏览 59人参与
# 查收我的offer竞争力报告 #
15714次浏览 214人参与
# 一觉醒来,我觉醒了超级打工人系统 #
2680次浏览 32人参与
# 没有实习经历,还有机会进大厂吗 #
804358次浏览 13801人参与
# 你觉得第一学历对求职有影响吗? #
14768次浏览 121人参与
# 我的工作日记 #
20948次浏览 270人参与
# 寒假躺平还是提前实习 #
57848次浏览 425人参与
# 秋招OC许愿 #
225678次浏览 1862人参与
# 秋招被确诊为…… #
53160次浏览 297人参与
# 总结:哪家公司面试体验感最差 #
25183次浏览 124人参与
# 不给转正的实习,你还去吗 #
1515506次浏览 16960人参与
# 公司情报交流地 #
31457次浏览 224人参与
# 机械人,签完三方你在忙什么? #
23663次浏览 124人参与