关注
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
相关推荐
牛客热帖
更多
正在热议
更多
# 如果春招能重来,我会___ #
3803次浏览 40人参与
# 想做Agent可以做哪些岗位? #
1889次浏览 23人参与
# 联宝杯大学生创新大赛,你的技术值得产业级答案 #
42419次浏览 496人参与
# 这个offer值得去吗? #
1543次浏览 22人参与
# 面试官拷打AI项目都会问什么? #
1554次浏览 80人参与
# 除了线上,还能去哪些地方投简历 #
2847次浏览 30人参与
# 你觉得最好用的AI编程工具是_ #
761次浏览 23人参与
# mt对你说过最有启发的一句话 #
115045次浏览 870人参与
# 你会因为行情,降低找工作标准吗? #
6960次浏览 77人参与
# 如何排解工作中的焦虑 #
324735次浏览 2791人参与
# 工作两年想退休了 #
272191次浏览 2057人参与
# 银行笔面经互助 #
195711次浏览 1324人参与
# 双非本科的出路是什么? #
230655次浏览 1657人参与
# 你的第一家实习公司是什么档次? #
73329次浏览 342人参与
# 你和你的mentor相处模式是__ #
5424次浏览 43人参与
# 你的mentor是什么样的人? #
61528次浏览 795人参与
# 科大讯飞求职进展汇总 #
384217次浏览 3069人参与
# 实习第一天,你在干什么 #
3352次浏览 24人参与
# 哪些公司在招寒假实习? #
95371次浏览 768人参与
# 秋招投递记录 #
416979次浏览 3283人参与
# 如果公司降薪,你会跳槽吗? #
160834次浏览 950人参与
查看11道真题和解析