zoukankan      html  css  js  c++  java
  • 【ARTS】打卡第三周

    每周完成一个ARTS

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

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

    • 学习至少一个技术技巧

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

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

      Algorithm

      11. 盛最多水的容器

      给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的。

      解法1

      暴力破解法

      时间复杂度:O(n^2)

      思路:两次遍历数组,取长度较小值与两点下标之差的乘积即面积,记录下面积最大值

      int maxArea(vector<int>& height) {
        int var = 0;
        int high = 0;
        int area = 0;
        for (int i = 0; i < height.size(); i ++)
        {
          for (int j = i + 1; j < height.size(); j ++)
          {
            high = height[i] > height[j] ? height[j]:height[i];
            area = high * (j - i);
            if (area > var)
            {
              var = area;
            }
          }
        }
      
        return var;
      }
      

      解法2

      双指针

      时间复杂度:O(n)

      思路:头尾指针,向中间移动,每次都移动长度较小一端(因为宽度逐渐缩小,以该点的长度为基准的面积不可能再大了),计算面积,取面积最大值

      int maxArea(vector<int>& height) {
        int left = 0, right = height.size() - 1;
        int var = 0;
        int high = 0;
        int area = 0;
        while(left < right)
        {
          if (height[left] <= height[right])
          {
            high = height[left];
            left ++;
          }
          else
          {
            high = height[right];
            right --;
          }
      
          area = high * (right - left + 1);
          if (area > var)
          {
            var = area;
          }
        }
        return var;
      }
      

      Review

      https://tour.golang.org/flowcontrol/1

      • for

      • go只有一个循环结构,for循环

        • 三部分:

          • init初始声明
            • 变量声明,且声明的变量只能用于for循环语句中
          • condition条件表达式
            • 条件表达式的值为false时,循环停止
          • post赋值表达式
        • for循环的{}必须一直存在

        • init post语句是可选的

          • 当init post都不存在时,两个;可去除,for循环类似c语句的while循环

            img

        • 无限循环

          img

      • if

        • 条件表达式不需要(),但是执行语句需要{}

          img

        • if支持变量声明,该变量只能用于if与else执行语句中

          img

      • switch

        img

        • 每个case后不需要写break,go语句自动提供break

        • switch后不加条件的话类似于if then else语句

          img

      • defer

        • defer声明的语句只在所在函数返回时才执行

          img

        • 一个函数内包括多个defer语句,先声明先执行

          img

      Tip

      iptables转发技术

      这周由于工作需求,看了下iptables转发相关的知识

      Share

      Git 分支管理实践 | 码云最佳实践

  • 相关阅读:
    Mybatis如何插入空字段
    为什么要将action实例设置为多例
    hibernate dynamic-update="true"属性不起作用原因(转载)
    查找到匹配的进程并关闭 linux ps -ef
    Mac 下解决修改IntelliJ IDEA 由于修改配置之后无法启动问题
    再聊移动端页面的适配
    重学前端
    前端面试
    使用Flexible实现手淘H5页面的终端适配
    vue-cli3.0 使用px2rem 或 postcss-plugin-px2rem
  • 原文地址:https://www.cnblogs.com/JesseTsou/p/11300469.html
Copyright © 2011-2022 走看看