• 【ARTS】打卡第二周


    每周完成一个ARTS

    • 每周至少做一个 leetcode 的算法题

    • 阅读并点评至少一篇英文技术文章

    • 学习至少一个技术技巧

    • 分享一篇有观点和思考的技术文章。

    • (也就是 Algorithm、Review、Tip、Share 简称ARTS)

      Algorithm

      215. 数组中的第K个最大元素

      在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

      解法1

      时间复杂度:O(nlogn)
      思路:使用快速排序,将数组排序,然后找到第k个最大的元素。这里需要复习一下快速一下快速排序的实现方法。

      int partition(vector<int> &vec, int left, int right)
      {
          int base = vec[left];
          while(left < right)
          {
              while(vec[right] >= base && left < right)
                  right --;
              swap(vec[left], vec[right]);
              while(vec[left] <= base && left < right)
                  left ++;
              swap(vec[left], vec[right]);
          }
      
          return left;
      }
       int fast_sort(vector<int> &vec, int left, int right)
      {
           if (left < right)
           {
               int point = partition(vec, left, right);
               fast_sort(vec, left, point - 1);
               fast_sort(vec, point + 1, right);
           }
           return 0;
      }
      
      int findKthLargest(vector<int> &nums, int k)
      {
          if (k > nums.size())
              return 0;
          fast_sort(nums, 0, nums.size() - 1);
          return nums[nums.size() - k];
      }
      

      解法2

      时间复杂度:O(nlogn)
      思路:利用快排的思想,所获取的patiton即已经排好序的位置,将其与倒数第k的位置作比较。
      若相等,则正好是所求的第k大位置;
      若小于,则继续对[patition + 1, high]求patition;
      若大于,则继续对[low, patition - 1]求pattion。

      int partition(vector<int> &vec, int left, int right)
      {
          int base = vec[left];
          while(left < right)
          {
              while(vec[right] >= base && left < right)
                  right --;
              swap(vec[left], vec[right]);
              while(vec[left] <= base && left < right)
                  left ++;
              swap(vec[left], vec[right]);
          }
      
          return left;
      }
      
      int findKthLargest(vector<int> &nums, int k)
      {
          if (k > nums.size())
              return 0;
          int point = 0;
          int low = 0, high = nums.size() - 1;
          int dest = nums.size() - k;
          while(1)
          {
              point = partition(nums, low, high);
              if (point == dest)
                  return nums[dest];
              else if (point > dest)
                  high = point - 1;
              else
                  low = point + 1;
          }
          return 0;
      }
      

      Review

      go lan Getting Started

      go语言官方文档,主要介绍了在win/mac/liunux下载、安装、测试、卸载go语言发布包的方法

      a tour of go

      the tour of go的使用方法

      • 提供交互界面来学习go的语法
      • 可以前后翻页,点击run来编译和运行交互界面上的程序,点击format可以格式化代码。
      • 可以设置本地语言,方便非英语使用者学习go
      • 指南可以下载到本地
      • 该指南是建立在运行于golang.org远程服务器的web服务,有使用的时间限制与执行时间限制

      package

      img

      • 每个go程序都是由package组成的
      • 程序以package main开始运行
      • package名与import路径名最后一个目录名相同
      • import多个package需要加上小括号,也可以写成多个import语句

      exported

      • 可被其他模块调用的函数或变量需要以大写字母开头

      functions

      • 函数可添加0个或多个参数

      • 函数参数变量名放在类型之前,返回值类型写在末尾

        img

      • 如果函数参数有同一类型变量,则可以将所有类型移除,只在最后添加一个类型

        img

      • 函数支持返回多个结果,函数调用者需要以:=来进行接收结果,对应地返回值类型需要以()写在函数名末尾

        img

      • 返回值重命名,返回值可以函数顶部作为已定义的变量,return返回没有参数,可以裸返回,这种情况应该只用于短函数中,如果用于长函数会损害可读性

        img

      变量

      • var声明变量列表,类型需要写在最后

        img

      • var后可添加变量初始化

        img

      • 在函数内部可使用:=来初始化变量,不需要写类型,可根据初始化值的类型自动判断,在函数外部不可这么使用

        img

      • 声明多种类型的变量

        img

      • 0值

        • 变量如果声明时,如果没有写明初始值,则会默认赋为0值:

          img

      • 基本类型

        img

      • 类型转换

        img

        • 使用表达式T(v)进行类型转换
        • go不支持类型的自动转换,不同类型的转换必须写出来
      • const

        • 声明变量后,变量不可被更改,即为常量
        • 不可使用:=声明变量

      Tip

      解决unzip在linux下解压中文名zip文件出现乱码的问题

      Share

      Markdown 语法说明 (简体中文版)

  • 相关阅读:
    PLSQL连接64位oracle,导入导出错误解决办法
    VS2008或者VS2010工具栏,标准里面的 在浏览器中浏览按钮不见了
    jquery radio取值,checkbox取值,select取值 及选中
    Waiting for HOME (‘android.process.acore’) to be launched…解决办法
    GetTickCount() 函数的作用和用法
    MFC ado连接access数据库
    VC切分窗口和多视图
    C++容器——插入与清除
    VC中在对话框上显示图片
    error LNK2005 已经在***.obj中定义
  • 原文地址:https://www.cnblogs.com/JesseTsou/p/11254714.html
Copyright © 2020-2023  润新知