代码随想录补打卡 739 每日温度 496下一个更大元素

739 每日温度

代码如下 

func dailyTemperatures(temperatures []int) []int {   单调栈中存放的是遍历过元素的下标,并且单调栈是递增的。

          res := make([]int,len(temperatures))    //建立一个结果数组

          stack := []int{}   //设置一个单调栈

          for i,v := range temperatures {   遍历数组 

              for len(stack) != 0 && v > temperatures[stack[len(stack)-1]] {   如果这个栈不为空,且遍历到的这个元素大于栈顶元素 那么就要进行统计  temperatures[stack[len(stack)-1]] 因为stack里存放的是下标,stack[len(stack)-1]而这个就表示栈顶元素,而栈顶元素表示数组元素的下标

                  top := stack[len(stack)-1]  这里取出栈顶元素的下标  

                  stack = stack[ :len(stack)-1]   并且将这个下标出栈

                  res[top] = i - top    结果数组的下标就是当前遍历到的元素下标减去栈顶元素的下标 

              }

              stack = append(stack,i)  如果不大于栈顶元素,就把这个元素的下标放入栈中 

          }

          return res 

}

496 下一个更大元素

代码如下 

func nextGreaterElement(nums1 []int, nums2 []int) []int {

                    res := make([]int,len(nums1))  和上题一样,设置一个结果数组 

                    for i,_ := range res {    初始化结果数组,将结果数组的初始值设置为-1 

                        res[i] = -1 

                    }

                    mp := map[int]int{}  设立一个map,是将数组1中的值和对应的下标一一对应 

                    for i,v := range nums1 {  

                         mp[v] = i 

                    }

                    stack := []int{}   设置一个栈 

                    stack = append(stack,0)  因为这个栈放入的是下标,所以将nums2的第一个元素的下标放入栈中 

                    for i := 1 ; i < len(nums2) ; i++ {  遍历nums2数组 

                        for len(stack) != 0 && nums2[i] > nums2[stack[len(stack)-1]] {  如果栈不为空且当前遍历的元素大于栈顶的元素 

                               top := stack[len(stack)-1]   取出这个栈顶元素的下标 

                               if _,ok :=  mp[nums2[top]] ; ok {  因为这个是在nums2中出现的数字,需要去nums1中找是否存在,如果存在,取出对应的下标 

                                    index := mp[nums2[top]] 

                                    res[index] = nums2[i]  并将这个下标放入当前遍历过的元素 

                               }

                               stack = stack[:len(stack)-1]  出栈 

                        }

                        stack = append(stack,i)

                    }

                    return res 

}

你可能感兴趣的:(数学建模,html,数据结构)