文章目录
 
 
leetcode之遍历系列算法
 
1.按键时间最长的键
 
1.1一次遍历
 
func slowestKey(releaseTimes []int, keysPressed string) byte {
    ans := keysPressed[0]
    maxTime := releaseTimes[0]  
    for i := 1; i < len(keysPressed); i++ {
        key := keysPressed[i]
        time := releaseTimes[i] - releaseTimes[i-1]
        if time > maxTime ||(time == maxTime && key > ans) {
            ans = key
            maxTime = time
        }
    }
    return ans
}
 

 
2.切片最大值及索引
 
package main
import (
	"fmt"
)
func main() {
	intArr := []int{3, -4, 93, 8, 12, 29}
	maxVal := intArr[0]
	maxValIndex := 0
	for i := 0; i < len(intArr); i++ {
		
		if maxVal < intArr[i] {
			maxVal = intArr[i]
			maxValIndex = i
		}
	}
	fmt.Println(maxVal, maxValIndex)
}
 

 
3.切片最小值及索引
 
package main
import (
	"fmt"
)
func main() {
	intArr := []int{3, -4, 93, 8, 12, 29}
	maxVal := intArr[0]
	maxValIndex := 0
	for i := 0; i < len(intArr); i++ {
		
		if maxVal > intArr[i] {
			maxVal = intArr[i]
			maxValIndex = i
		}
	}
	fmt.Println(maxVal, maxValIndex)
}
 
4.至少是其他数字两倍的最大数
 
4.1一次遍历
 
func dominantIndex(nums []int) int {
    
    if len(nums)<=1{
        return 0
    }
    
    lastMax,max:=0,nums[0]
    
    maxIndex:=0
    
    for i:=1;i<len(nums);i++{
        
        if nums[i]>max{
            lastMax=max
            max=nums[i]
            maxIndex=i
        
        }else if nums[i]>lastMax{
            lastMax=nums[i]
        }
    }
    
    if max>=lastMax*2{
        return maxIndex
    }
    
    return -1
}
 

 
5.递增的三元子序列
 
5.1双向遍历
 
func increasingTriplet(nums []int) bool {
    n := len(nums)
    if n < 3 {
        return false
    }
    leftMin := make([]int, n)    
    leftMin[0] = nums[0]
    for i := 1; i < n; i++ {
        leftMin[i] = min(leftMin[i-1], nums[i])    
    }
    rightMax := make([]int, n)
    rightMax[n-1] = nums[n-1]
    for i := n - 2; i >= 0; i-- {
        rightMax[i] = max(rightMax[i+1], nums[i])
    }
    
    for i := 1; i < n-1; i++ {
        if nums[i] > leftMin[i-1] && nums[i] < rightMax[i+1] {
            return true
        }
    }
    return false
}
func min(a, b int) int {
    if a > b {
        return b   
    }
    return a
}
func max(a, b int) int {
    if b > a {
        return b   
    }
    return a
}
 
