字节笔试 9.18 后端方向思路

金字塔累方块

  • 数组保存一层可放置的方块左端点
  • 放置新一层是,符合三种情况之一则可以放置
    • 地面层
    • 重心落于上一层的方块区间内
    • 左右端点同时落于上一层的方块区间内
  • 由于每一层保存的端点为有序的,因此判断一点是否落于一层的区间用的二分
  • 只过了92%,可能哪里没处理好

神奇序列

  • dp0[i]保存以0结尾的最长神奇序列长度
  • dp1[i]保存以1结尾的最长神奇序列长度
      if (s[i] == '1') {
          dp1 = dp0 + 1;
          dp0 = 0;
      }
      else {
          dp0 = dp1 + 1;
          dp1 = 0;
      }
      if (max(dp0, dp1) >= 3)
          ans = max(ans, max(dp0, dp1));

ASDF

假设字串长度为4n,则字频应该为n

  • 遍历,计算ASDF四种字母出现的次数
  • 替换字串满足的要求:
    • 对于出现超出n次的字母,需要在替换字串中包含(count() - n)个;未超过n次的字母没有要求
  • 因此问题转化为找到满足出现给定次数字母的最短子串长度,用滑窗即可

书柜放书

  • 我的思路是类似于*********239滑动窗口最大值,用两个窗口,其分别显示当前窗口内的最大和最小值,如果满足题目高度差要求,则这个窗口是一个符合题目的放置方法
  • 按窗口大小降序进行尝试,如果存在至少一种放置方法,则直接输出答案
  • 滑动窗口最大值的O(n)方法忘记怎么写了,用的优先队列;最后提交超时了只过了70%
  • 感觉滑窗用O(n)处理也还是可能超,有无懂哥讲一下好的思路
#字节笔试#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务