zoukankan      html  css  js  c++  java
  • golang刷题常用代码

    数据结构

    type stack []interface{}
    
    func (s *stack) empty() bool {
        return len(*s) == 0
    }
    
    func (s *stack) length() int {
        return len(*s)
    }
    
    func (s *stack) push(v interface{}) {
        (*s) = append((*s), v)
    }
    
    func (s *stack) pop() interface{} {
        r := (*s)[len((*s)) - 1]
        (*s) = (*s)[:len((*s)) - 1]
        return r
    }
    
    func (s *stack) peek() interface{} {
        return (*s)[len((*s)) - 1]
    }
    

    队列

    type queue []interface{}
    
    func (s *queue) empty() bool {
        return len(*s) == 0
    }
    
    func (s *queue) length() int {
        return len(*s)
    }
    
    func (s *queue) offer(v interface{}) {
        (*s) = append((*s), v)
    }
    
    func (s *queue) poll() interface{} {
        r := (*s)[0]
        (*s) = (*s)[1:]
        return r
    }
    
    func (s *queue) peek() interface{} {
        return (*s)[0]
    }
    

    排序

    type slc [][]int
    
    func (s *slc) Len() int {
        return len(*s)
    }
    
    func (s *slc) Swap(i, j int) {
        (*s)[i], (*s)[j] = (*s)[j], (*s)[i]
    }
    
    func (s *slc) Less(i, j int) bool {
        a, b := (*s)[i], (*s)[j]
    
        if a[0] > b[0] {
            return true
        } else if a[0] < b[0] {
            return false
        }
    
        return a[1] < b[1]
    }
    

    快速排序

    排序数组

    func sort(s *[]int, l, r int) {
          if l < r {  // key1 :l < r时 才进行排序
                mid := partition(s, l, r)
                sort(s, l, mid-1)
                sort(s, mid+1, r)
          }
    }
    
    func partition(s *[]int, l, r int) int {
          pivot := (*s)[r] // key2 : pivot保存的时最右边的值
          
          for l < r { // key3: 终止条件是l<r,那么终止时,l == r
                for l < r && (*s)[l] <= pivot {  //key4: 首先进行移动的,一定是和pivot相对应的方向
                      l++
                } 
                (*s)[r] = (*s)[l]
    
                for l < r && (*s)[r] >= pivot { //key5: 与pivot比较时,用>=, <=
                      r--
                } 
                (*s)[l] = (*s)[r]            
          }
          (*s)[l] = pivot  //  key6: 最后pivot赋值 
          return l
    } 
    

    归并排序

    func mergesort(s *[]int, l, r int, tmp *[]int) {
        if l >= r {
            return
        }
    
        mid := (l+r)/2
        mergesort(s, l, mid, tmp)
        mergesort(s, mid+1, r, tmp)
    
        i, j, k := l, mid+1, 0
        for i<=mid && j<=r {
            if (*s)[i] <= (*s)[j] {
                (*tmp)[k] = (*s)[i]
                i++
            } else {
                (*tmp)[k] = (*s)[j]
                j++
            }
            k++
        }
    
        for ;i<=mid; i++ {
            (*tmp)[k] = (*s)[i] 
            k++     
        }
    
        for ;j<=r; j++ {
            (*tmp)[k] = (*s)[j]
            k++
        }    
    
        for i:=0; i<r-l+1; i++ {
            (*s)[l+i] = (*tmp)[i]
        }
    }
    

    小顶堆

    253. 会议室 II

    
    func (pq *pqueue) Len() int {
        return len(*pq)
    }
    
    func (pq *pqueue) Swap(i, j int) {
        (*pq)[i], (*pq)[j] = (*pq)[j], (*pq)[i]
    }
    
    func (pq *pqueue) Less(i, j int) bool {
        a, b := (*pq)[i], (*pq)[j]
    
        return a < b
    }
    
    func (pq *pqueue) Push(v interface{}) {
        *pq = append(*pq, v.(int))
    }
    
    func (pq *pqueue) Pop() interface{} {
        t := (*pq)[len(*pq)-1]
        *pq = (*pq)[:len(*pq)-1]
        return t
    }
    
    // 使用方式
    pq := &pqueue{}
    
    heap.Init(pq)
    
    heap.Push(pq, v)
    
    heap.Pop(pq)
    
  • 相关阅读:
    9月9
    JavaScript语法(三)
    JavaScript语法(二)
    实现AJAX的基本步骤 。。转
    Ajax 完整教程。。转载
    Struts2中的Action类(解耦方式,耦合方式)
    web应用中使用JavaMail发送邮件 。。转载
    Struts2下的<result>中的type整理
    Struts2整理+课堂代码+注意事项
    一对多,多对一,注意事项总结
  • 原文地址:https://www.cnblogs.com/holidays/p/golang_leetcode.html
Copyright © 2011-2022 走看看