字节前端实习的两道算法题,看看强度如何

这篇具有很好参考价值的文章主要介绍了字节前端实习的两道算法题,看看强度如何。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

字节前端实习的两道算法题,看看强度如何,面试题,前端,算法

最长严格递增子序列

题目描述

给你一个整数数组nums,找到其中最长严格递增子序列的长度。
子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
示例:
输入:nums = [2,1,6,3,5,4]
输出:3
解释:最长递增子序列是 [1,3,4],因此长度为 3。

思路

这道题要求最长上升子序列的长度,可以使用动态规划或贪心+二分查找两种方法来解决。

  1. 动态规划
    定义状态:dp[i]表示以第i个元素为结尾的最长上升子序列的长度。
    状态转移方程:对于第i个元素,枚举其前面的元素j,如果nums[i] > nums[j],则dp[i] = dp[j] + 1。同时,在每次更新dp[i]时,更新ans为其最大值。

  2. 贪心+二分查找
    定义一个数组d,d[i]记录长度为i的上升子序列的末尾元素的最小值。对于一个新的元素num[i],如果num[i]大于d[len],说明可以扩展当前的最长上升子序列,直接将其加入到d中;否则在d中查找第一个大于等于num[i]的元素位置pos,用num[i]替换它,使得可以扩展更长的上升子序列。

两种方法的时间复杂度分别为O(n^2)和O(nlogn),空间复杂度都是O(n)。

代码

// 方法一:动态规划:时间复杂度O(n^2) 空间复杂度O(n)
var lengthOfLIS = function(nums) {
  if(nums.length === 0) return 0

  const dp = new Array(nums.length).fill(1)

  let ans = 1;
  for(let i = 1 ; i < nums.length; i ++) {
    for(let j = 0 ; j < i ; j ++) {
        if(nums[i] > nums[j]) {
            dp[i] = Math.max(dp[i],dp[j] + 1);
        }
    }
    ans = Math.max(dp[i],ans);
  }
  console.log(dp);
  return ans;
}; 

// 方法二:贪心+二分查找:时间复杂度O(nlogn) 空间复杂度O(n)
var lenghtOfLIS = function(nums) {
  let n = nums.length;
  if(n === 0) return 0;

  let d = new Array(n + 1).fill(0);
  let len = 1;
  d[len] = nums[0];
  for(let i = 1; i < n ; i ++) {
    if(num[i] > d[len]) {
      d[++len] = nums[i];
    } else {
      let l = 1 , r = len , pos = 0;
      while(l <= r) {
        let mid = (l + r) >> 1;
        if(d[mid] < num[i]) {
          pos = mid;
          l = mid + 1;
        } else {
          r = mid - 1;
        }
      }
      d[pos + 1] = nums[i];
    }
  }
  return len;
}

路径总和 II

题目描述

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

输入:nums = [10,9,2,5,3,7,101,18]
输出:4
解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。

思路

我们可以采用深度优先搜索的方式,枚举每一条从根节点到叶子节点的路径。当我们遍历到叶子节点,且此时路径和恰为目标和时,我们就找到了一条满足条件的路径。文章来源地址https://www.toymoban.com/news/detail-683261.html

代码

var pathSum = function(root, target) {
    let ans = [],path = [];
    let dfs = (root,target) => {
        if(!root) return;

        path.push(root.val);
        target -= root.val;
        if(root.left === null && root.right === null && target === 0) {
            ans.push([...path]);
        }
        dfs(root.left,target);
        dfs(root.right,target);
        path.pop(root.val);
    }
    dfs(root,target);
    return ans;
};

到了这里,关于字节前端实习的两道算法题,看看强度如何的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最低36W,前员工曝光字节岗位薪酬体系,看看你在字节能拿多少K?

    曾经的互联网是PC的时代,随着智能手机的普及,移动互联网开始飞速崛起。而字节跳动抓住了这波机遇,2015年,字节跳动全面加码短视频,从那以后,抖音成为了字节跳动用户、收入和估值的最大增长引擎。 自从字节逐步壮大之后,也成了IT行业人才除了BAT之外的第一选择

    2024年02月09日
    浏览(24)
  • 前端开发专业实习报告

            专业实习开始于6月13日,结束于7月1日,短暂而充实的三周,就这样结束了。重新回顾HTML、CSS、JS和vue的知识点的时候,我觉有时候学习的知识再去回顾的时候有一些不同的理解,就像是有一句俗话所说“书读百遍其义自见”,老师又通过做相关项目,让我们运用到

    2024年02月16日
    浏览(35)
  • 前端实习day35

    今天是下早班的一天,下完班直接赶车回广州了,吐槽一下深圳站管理得真得差,候车厅小,人巨多,而且进站口的标识也很少,绕了好久才找到!下次再也不去了。 今天是改bug的一天,但是有半天后端接口都不难用,所以就在刷掘金文章,学习学习技术,下面是一些总结资

    2024年02月11日
    浏览(28)
  • 网易前端实习生上岸经历

    大家好,本人目前本科软工大三在读,借此文章总结自己半个月上岸网易经历和回顾自己前端学习旅途。 本篇文章写于23年11.7号拿到网易offer当天,当初写完忘记发了,今天无意在文件中看到,就发出来吧。 我接触前端算是比较早的了,刚上大学时,很幸运吧,加入了大学一

    2024年02月22日
    浏览(42)
  • 前端实习第五周周记

    每一天做了什么还是要记录一下,不然过两天后就会发现,慢慢遗忘自己的收获与做过的东西。 这周做的是医学检验系统的样本库部分。由于是公司的代码所以不能交代具体,那么久聊一下每天具体做了些什么以及我的一些收获。 周一上午利用treambition拿到任务后,深感任务

    2024年02月12日
    浏览(34)
  • 前端实习第一周周记

    第一天来的时候,十点左右就开始跑代码了,公司发了电脑,但由于自己的电脑环境比较齐全,所以就先用自己的电脑跑的代码。 一共是两个项目,一个pc类似于管理系统,还有一个是微信小程序。 拉代码的过程中遇到的问题: 自己的电脑git切换用户名和密码后拉代码报错

    2024年02月15日
    浏览(26)
  • 前端实习面试常考(定位、文档流)

    最近在找前端的实习,看了很多面试题,再这里做一个总结分享给大家,希望对大家的实习面试起到一些帮助(本人刚入门不久,如果大家对我的内容有异议,欢迎大家私信,交流一下,共同进步) 对于前端实习面试题这个模块,我大体分为4个部分,HTMLCSS、JavaScript、计算机

    2024年02月04日
    浏览(28)
  • 前端知识点——快看看忘了多少

    说说对浏览器缓存的了解 浏览器缓存是一种用于存储Web页面资源的临时存储机制,旨在提高网页加载速度和减少对服务器的请求。当你访问一个网站时,浏览器会下载并保存页面的各种资源,如HTML、CSS、JavaScript文件、图像以及其他多媒体内容。这些资源会被缓存在本地,以

    2024年04月16日
    浏览(32)
  • 极路由怎么调信号强度如何设置穿墙模式

    极路由(hiWiFi)的穿墙模式是其宣传的一大特点,但是买回去发现极路由穿墙效果并不好啊,这是怎么回事?极路由支持无线发射功率调节,共有强、中、环保模式(低)和穿墙模式四个选项。下面跟下载吧小编来看看极路由是怎么调穿墙模式的。 极路由无线功率设置步骤

    2024年02月07日
    浏览(26)
  • 记录--前端实习生的这个 bug 被用做了一道基础面试题

    测试发现了一个问题,简单描述问题就是通过函数删除一个数组中多个元素,传入的参数是一个数组索引。 然后发现实际效果有时删除的不是想要的内容。 具体  Bug  代码实现: 上面代码出现问题的原因是 splice 会改变原始数组的,然后导致索引偏移,不知道有没有同学出过

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包