LeetCode_2100
题目如下图
这题恰好是浙江农信赞助的周赛题,《适合打劫银行的日子》,刑。
解题思路:
先是从前往后遍历找到前缀长度满足条件的所有节点,
再从后往前遍历找到前缀长度满足条件的节点,若该节点的前缀长度也满足条件,则入队列。
代码如下
1 class Solution { 2 public List<Integer> goodDaysToRobBank(int[] security, int time) { 3 int pre = 0,end = 0; 4 int len = security.length; 5 int[] preArr = new int[len];//记录前缀满足条件的节点 6 //List<Integer> preList = new LinkedList<>();用这个会超时V_V 7 List<Integer> ansList = new LinkedList<>(); 8 int rear = -1; 9 for(int i = 0; i < len; i++){ 10 if (security[i] <= rear) { 11 pre++; 12 } else { 13 pre = 0; 14 } 15 //security[i] <= rear ? pre++ : pre = 0; 16 rear = security[i]; 17 if(pre >= time){ 18 //preList.add(i); 19 preArr[i] = 1; 20 } 21 } 22 rear = - 1; 23 for(int i = len -1; i > -1; i--){ 24 if (security[i] <= rear) end++; 25 else end = 0; 26 rear = security[i]; 27 if(end >= time && preArr[i] == 1){ 28 ansList.add(i); 29 } 30 } 31 return ansList; 32 } 33 }