【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 分支管理实践 | 码云最佳实践

转载于:https://www.cnblogs.com/JesseTsou/p/11300469.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值