【Java|golang】1124. 表现良好的最长时间段---双指针

给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。

我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。

所谓「表现良好的时间段」,意味在这段时间内,「劳累的天数」是严格 大于「不劳累的天数」。

请你返回「表现良好时间段」的最大长度。

示例 1:

输入:hours = [9,9,6,0,6,6,9]
输出:3
解释:最长的表现良好时间段是 [9,9,6]。
示例 2:

输入:hours = [6,6,6]
输出:0

提示:

1 <= hours.length <= 104
0 <= hours[i] <= 16

public int longestWPI(int[] hours) {
        Map<Integer, Integer> map = new HashMap<>();
        int max=0,sum=0;
        for (int i = 0; i < hours.length; i++) {
            sum+=hours[i]>8?1:-1;
            if (sum>0){
                max=Math.max(max,i+1);
            }else {
                max=Math.max(max,i-map.getOrDefault(sum-1,i));
            }
            map.putIfAbsent(sum,i);
        }
        return max;
    }

【Java|golang】1124. 表现良好的最长时间段---双指针_第1张图片

func longestWPI(hours []int) int {
	mapX:=make(map[int]int,0)
	max,sum:=0,0
	for i, v := range hours {
		sum+=1
		if v<=8 {
			sum-=2
		}
		if sum>0{
			if max<i+1 {
				max=i+1
			}
		}else {
			value,ok:=mapX[sum-1]
			if ok&&i-value>max{
				max=i-value
			}
		}
		if _,ok:=mapX[sum];!ok{
			mapX[sum]=i
		}
	}
	return max
}

【Java|golang】1124. 表现良好的最长时间段---双指针_第2张图片

你可能感兴趣的:(面试,golang,指针,leetcode,golang,java)