字节跳动的三道编码面试题的实现

秋招复盘!10月面百度3面被拒,11月重整旗鼓4面字节跳动拿下offer! 前言 最新真的是太累的一天了,先是面了百度(三面)、又是面了字节 刚面完就来写面经了。趁着还记得 先说一下百度吧 百度一面 1.自我介绍,他说我java学的时间确实有点短,为啥去报这个方向 2.项目介绍,没问很深 3.出了一个题,就是经典的动态规划问题,换钱最少货币数 4.做完之后,问我能不能继续优化,进行了继续升级 5.开始说一下这个题你的思路,有没有更好地思路 6.开始问基础,先问了我new int存储在哪里?我跟他说基本类型不能new吧,后来才知道go语言可以,好神奇 7.问我堆和栈的那个级别更高?主 阅读详情

自己的一个小圈子微信群的伙伴们发了一张图片,是网上流传的字节跳动的面试题编码,闲的无事就思索了下,发现都不难,都是对基础的数学知识的考量。先上图吧!

当然40分钟,我也无法把任意两题编码完成,只是知道大概的解题思路,唯一能确定的,在面试规定时间内,第二题我是肯定可以在20分钟内编码完成。

字节跳动的三道编码面试题的实现

 

题目一

字节跳动的三道编码面试题的实现

 

基础知识就是初中的平面直角坐标系,解析思路:

  1. 计算总周长;
  2. 将各边长的前后坐标计算出来封装好,第四步要使用;
  3. 根据K段值计算出平均分段后的长度;
  4. 然后循环K次,根据平均长度依次相加计算等分点的坐标。

不多说,上代码:

先定义坐标的Point类

class Point {
 float x; float y; public Point() { } public Point(float x, float y) { this.x = x; this.y = y; } public Point(Point point) { this(point.x, point.y); } @Override public String toString() { return "Point, x:" + x + " y:" + y; } }

N边形的边封装类

class Line {
 Point begin; Point end; float length; public Line() { } public Line(Point begin, Point end, float length) { this.begin = begin; this.end = end; this.length = length; } }

现在上实现计算的类

这段代码第一个版本的时候,在正方形偶数等分的时候,坐标点计算不准确,今晚上看着代码思考了10分钟的样子,稍微改动了下,暂时没有这个bug了。其他的bug,期待大家一起发现,然后修复吧!

public class Polygon {
 /** * 计算边的长度 *  * @return */ private static float lineLength(Point a, Point b) { float length; if (a.x == b.x) { // 垂直线条 length = Math.abs(a.y - b.y); } else { length = Math.abs(a.x - b.x); } return length; } /** * 计算 周长 *  * @return */ private static float totalSideLength(Point[] points, Line[] lines) { float side = 0; for (int i = 1; i < points.length; i++) { Point prev = points[i - 1]; Point point = points[i]; float length = lineLength(prev, point); side += length; lines[i - 1] = new Line(prev, point, length); if (i == points.length - 1) { length = lineLength(point, points[0]); side += length; lines[i] = new Line(point, points[0], length); } } return side; } public static Point[] division(Point[] points, int divisionNum) { Point[] divisionPoint = new Point[divisionNum]; // 计算周长 Line[] lines = new Line[points.length]; float side = totalSideLength(points, lines); // 等分长度 float divisionLength = side / divisionNum; int lineIndex = -1; float sumLength = 0; for (int i = 0; i < divisionNum; i++) { if (i == 0) { // 第一个等分点直接是起始点坐标 divisionPoint[i] = new Point(points[0]); continue; } divisionPoint[i] = new Point(); float lineLength = divisionLength * i; while (true) { Line line; if (sumLength < lineLength) { lineIndex++; line = lines[lineIndex]; sumLength += line.length; } else line = lines[lineIndex]; if (sumLength >= lineLength) { float temp = sumLength - lineLength; if (line.begin.x == line.end.x) { // begin和end的坐标点垂直 divisionPoint[i].x = line.begin.x; if (line.end.y > line.begin.y) divisionPoint[i].y = line.end.y - temp; else divisionPoint[i].y = line.end.y + temp; } else { // begin和end的坐标点水平 divisionPoint[i].y = line.end.y; if (line.end.x > line.begin.x) divisionPoint[i].x = line.end.x - temp; else divisionPoint[i].x = line.end.x + temp; }  break; } } } return divisionPoint; } private static void print(Point[] points) { for (int i = 0; i < points.length; i++) { System.out.println("第" + (i + 1) + "等分点, x:" + points[i].x + ",y:" + points[i].y); } } public static void main(String[] args) { Point[] points = new Point[] { new Point(0, 0), new Point(0, 1), new Point(1, 1), new Point(1, 0) }; Point[] divPoints = division(points, 8); print(divPoints); }}

题目二

字节跳动的三道编码面试题的实现

 

解题思路:

对应位数的数字相加,永远不会超过18,所以,我们就先把对应位置的和计算出来,然后再反复循环找到大于9的数,向高位进位。

这个比较简单,只是考察个位数的正整数加法永远不大于18这个细节。

上代码:

public class LinkAddition {
 static class NumNode { public int num; public NumNode next; public NumNode() { } public NumNode(int num) { this.num = num; }; public NumNode(int num, NumNode next) { this(num); this.next = next; } } private static int length(NumNode num) { int length = 0; NumNode temp = num; while (temp != null) { length++; temp = temp.next; } return length; } private static NumNode calc(NumNode a, NumNode b, int aLength, int bLength) { NumNode aNode = a; NumNode bNode = b; NumNode result = new NumNode(); NumNode resultNode = result; // 计算b链表再a中的起始索引 int aStartIndex = aLength - bLength; for (int i = 0; i < aLength; i++) { if (i >= aStartIndex) { resultNode.num = aNode.num + bNode.num; bNode = bNode.next; } else resultNode.num = aNode.num; aNode = aNode.next; if (aNode != null) { resultNode.next = new NumNode(); resultNode = resultNode.next; } } return result; } public static NumNode addition(NumNode a, NumNode b) { NumNode result = null; // 计算位数 int aLength = length(a); int bLength = length(b); if (aLength > bLength) { result = calc(a, b, aLength, bLength); } else { result = calc(b, a, bLength, aLength); } boolean isGreater9 = true; while (isGreater9) { isGreater9 = false; NumNode node = result; while (node != null) { // 检查是否有大于9的节点 if (node.num > 9) { isGreater9 = true; break; } node = node.next; } // 没有大于9且需要进位的节点 if (!isGreater9) break;  node = result;  if (node.num > 9) { // 头节点的内容跟大于9,需要进位 result = new NumNode(1, node); node.num = node.num - 10; } while (node.next != null) { if (node.next.num > 9) { node.num += 1; node.next.num = node.next.num - 10; } node = node.next; } } return result; } private static void print(NumNode num) { NumNode node = num; while (node != null) { System.out.print(node.num); node = node.next; } } public static void main(String[] args) { NumNode a = new NumNode(9); a.next = new NumNode(9, new NumNode(9)); NumNode b = new NumNode(9); // b.next = new NumNode(9, new NumNode(9)); NumNode result = addition(a, b); print(result); }}

题目三

字节跳动的三道编码面试题的实现

 

这个我写的第一个版本,只契合类那个举例,然后瞬间就被我推翻类,最后坐下思考类10分钟,把这个按照二维数组的思路解析了。

先找到最高处,然后就以最高处为一个维度,做循环计算出水量,还是上代码吧:

public class Water {
 public static int waterNum(int[] steps) { int waterNum = 0; int max = steps[0]; for (int i = 1; i < steps.length; i++) { if (max < steps[i]) max = steps[i]; } for (int i = 0; i < max; i++) { int num = 0, index = 0; for (int n = 0; n < steps.length; n++) { if (steps[n] - i > 0) { if (num > 0) { waterNum += n - index - 1; } num = steps[n] - i; index = n; } } } return waterNum; } public static void main(String[] args) { int[] steps = new int[] { 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 3, 0, 1 }; int water = waterNum(steps); System.out.println(water); }}

总结:

其实这几题本身的知识点并不难,都是平时用到的,就看怎么转化为代码罢了。

第一题考察的直角坐标系上怎么计算边长,然后根据均分等长从第一条边挨着走,计算对应的坐标,该知识点在初中就已学过。

第二题则是考察每位上的正整数加法到底最大能到多少,只要明白了这一点,把每一位上相加后,再统一做进位处理就可以了。

第三题的代码量是最少的,我的解题思路是二位数组的方式, 也不算难。

字节跳动研发岗春招编程题全解析:题型、套路与备战计划 算法与数据结构是软件开发工程师的核心基本功,从字符串哈希到数组双指针,从动态规划到二分查找,这些经典问题不仅出现在LeetCode等刷题平台,更是大厂研发岗笔试面试的高频考察点。理解问题的本质、掌握通用的解题套路,并能在有限时间内完成代码实现,是技术面试成功的关键。在企业招聘中,编程题往往用于评估候选人的逻辑思维、代码风格与边界处理能力。对于准备春招的求职者来说,系统梳理题型分布、熟悉ACM模式输入输出,并制定科学的备战计划,能够显著提升备考效率。基于真实经验复盘,这里深入拆解字节跳动研发岗春招编程题的题型 阅读详情

相关推荐

编译原理实验二:LL(1)分析法(附C/C++完整代码)

本文讲述了LL(1)文法的原理及如何用C语言实现。并在给出的代码中实现了消除文法的左递归,First集,Follow集,select集的输出,构造预测分析表并输出,和对任意输入字符串的分析。程序总流程为:从文件读取文法 -> 输出文法信息 -> 消除左递归并输出消除后的文法 -> 计算First集并输出 -> 计算Follow集并输出 ->计算select集并输出 -> 判断是否是LL(1)文法 -> 构造预测分析表并输出 ->手动输入要分析的字符串 -> 输出分析过程和结果读取文件。

W_Wmwmwm的博客 6195

python编码声明可以位于文件的任意位置吗_大佬们的 Python 编码规范

python 文件的组成为了便于描述,先上一个 demo#!/usr/bin/env python# -*- coding: utf-8 -*-"""通常这里是关于本文档的说明(docstring),须以半角的句号、 问号或惊叹号结尾!本行之前应当空一行,继续完成关于本文档的说明如果文档说明可以在一行内结束,结尾的三个双引号不需要换行;否则,就要像下面这样"""import os, timeimp...

weixin_39625987的博客 312

微信小程序审核避坑指南:巧用 wx.getAccountInfoSync 实现审核与线上环境无感切换

本文详细介绍了如何利用`wx.getAccountInfoSync`API实现微信小程序审核与线上环境的无感切换。通过环境识别技术和动态渲染架构设计,开发者可以优雅解决审核资质门槛问题,同时保持生产环境的完整用户体验。文章包含组件化实现、全局状态管理等实用方案,帮助开发者提升审核通过率。

weixin_30527423的博客 260

Python零基础入门篇 - 19 - 字符串的编码格式,字节跳动面试真题

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。学计算机的都知道,计算机是以二进制的形式来存储数据的,即它只认识。

877

利用netmq在相机应用于unity之间传输图像数据

Unity工业相机接入方案解析 本文探讨了在Unity中接入不同品牌工业相机的技术方案。研究发现: Basler相机可直接调用官方DLL(pylonc.net.dll)实现接入 海康和大恒相机因驱动DLL依赖C++组件,无法直接调用 解决方案:通过独立进程(相机应用程序)与Unity进行通信,采用NetMQ实现图像数据传输 技术实现要点: 相机端:使用PublisherSocket发布JPEG图像帧 Unity端:通过SubscriberSocket订阅图像数据 优化:设置高水位线控制缓存帧数,避免数据堆积

weixin_46450859的博客 417

Wi-Fi Sigma测试系统

Wi-Fi Sigma测试系统是Wi-Fi联盟(WFA)提出的一套全自动的WiFi认证测试系统,几乎涵盖的所有Wi-Fi的功能及性能(throughput)的自动化测试。该系统正逐步取代以前的WiFi认证测试系统。

Ke8323的博客 1万+

2024字节三面终上岸,这份热腾腾的面经 请收好!

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取。

pckzzy119的博客 520

了解你的GPU:深入探讨AMD SMI

2024年9月17日 作者:Matt Elliott对于使用AMD硬件的系统管理员和高级用户来说,性能优化和高效的资源监控至关重要。AMD系统管理界面命令行工具`amd-smi`正是为了解决这些需求而设计的。amd-smi是一个多功能的命令行工具,专门用于管理和监控AMD硬件,主要侧重于GPU。作为未来取代`rocm-smi`的工具,`amd-smi`有望成为跨广泛设备的AMD硬件管理的主要工具。

数字人生 4527

面试Coding:反转long

在经历一个月的面试后,笔者回到家休息,不曾想晚上10点多收到Base地广州某大厂第二天早上的面试,为了把握秋招的每次机会,笔者连夜回学校取回电脑,全力面对第二天的面试,不曾想面的稀碎!

m0_56724799的博客 291

抖音用户主页视频数据爬虫详解(点赞,收藏,分享等)

的包中有个max_cursor参数,请求载荷中也有一个这样的参数,每次请求的数据中max_cursor是下一个请求的载荷,,,同时has_more为1时候代表还能请求,0为不能请求,我们做如下判断。最后发现cookie很容易过期,批量爬取有点困难,,,,我们采用drissoinpage进行自动化获取。首先进行抓包分析,,,随便找个主页,f12,关键词搜索,发现这个包是以post开头。请你第一次运行先按0,进行登录(或者触发反爬的时候),登录完成之后,按1进行爬取,完整代码请在知识星球。

m0_74823507的博客 3432

QTI Camera Stack 中的多摄调度模型与 SyncGroup 实现机制详解

在当前高端移动影像系统中,搭载主摄、长焦、超广、ToF、IR 等多个图像模组已成标配,实现高效、低延迟、高稳定性地调度这些 Sensor 的图像能力成为 QTI Camera Stack 架构的关键组成。高通平台通过构建 Camera SyncGroup 模型与多层调度策略,在 ISP 层实现多模组图像流的绑定控制、帧级时间同步、主副摄无感切换、双路并发采集等能力。 本文基于 Snapdragon 8 Gen 系列平台的实际调测经验,系统解析 Camera Stack 中多摄调度模型的结构设计、各层模块职责

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1055

复工在即:送你三道字节跳动的编码面试题,教你如何实现如何解题

自己的一个小圈子微信群的伙伴们发了一张图片,是网上流传的字节跳动的面试题编码,闲的无事就思索了下,发现都不难,都是对基础的数学知识的考量。先上图吧! 当然40分钟,我也无法把任意两题编码完成,只是知道大概的解题思路,唯一能确定的,在面试规定时间内,第二题我是肯定可以在20分钟内编码完成。 题目一 基础知识就是初中的平面直角坐标系,解析思路: 计算总周长; 将各边长的前...

程序员小天 528

vue3中使用antv-S2表格(基础功能版)

表格的数值默认会渲染排序 icon, 可以配置 showDefaultHeaderActionIcon关闭。当配置为对象时,always 控制是否在子维度不足 2 个时始终展示小计,默认不展示。首先创建一个vue3+vite+ts项目,可以查看下面相关文章,只看第一条即可。可以调整行宽、列宽、列排序、单个单元格详情展示、选中某列、某行等基本功能。可以通过上面设置的SUM函数自动计算出数值,也可以自定义累加函数。配置自定义方法优先级大于配置聚合方式,即配置。1、在项目中安装(npm/pnpm都可以)

蜗牛~~ 2210

字节跳动算法面试深度解析:基于高频题库的6个月备战指南

面对字节跳动(ByteDance)的算法面试,你是否感到迷茫不知从何入手?是否在浩如烟海的LeetCode题目中迷失了方向?本文将通过深入分析字节跳动近6个月的高频面试题数据,为你提供一套系统化的备战策略,帮助你在有限时间内实现最大化的算法能力提升。 ## 核心数据揭示:字节跳动面试的真实面貌 通过对bytedance_6months.csv文件的全面分析,我们发现了字节跳动算法面试的几个关键

gitblog_00071的博客 494

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

HULU、字节跳动秋招面试题

【HULU】2018暑期实习面试题 题目地址: 最小栈 构造数据结构,能够满足普通栈的功能(入栈、出栈、栈顶),并且能够输出当前栈的最小元素。 https://leetcode-cn.com/problems/min-stack/ 解题思路: 添加一个辅助栈,如果入栈的元素比辅助栈栈顶的元素还小,那么把辅助栈栈顶的元素入栈即可。 AC代码: class MinStack {...

布生气 1297

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

字节跳动2020届秋招 Java 笔试题

第一题 ,问最晚什么时候起床 N:闹钟数 <= 100 HI 小时 Mi 分钟 0 - 24 X 去教室走几分钟 0 - 60 A 上课时间 输入案例: 3 定三个闹钟 5 0 闹钟1 6 0 闹钟2 7 0 闹钟3 59 ...

qq_40398017的博客 986

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

2024年最全2024年7月四面字节跳动,抗住算法后艰难拿到后端offer,薪资18K,java商城项目面试

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档还有更多面试复习笔记分享如下本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取自我介绍算法题一:无序数组的中位数(快排思想O(N)时间复杂度)算法题二:给-数组,让你找- -对满足i

2401_84692751的博客 368

因为三道算法题,被Google给刷了,靠着这份字节的算法学习笔记,进军字节跳动Android开发岗位!(1)

看到了Google招聘的海报,说要参加Google Code Jam Kickstart的D轮和E轮才有面试机会,鉴于D轮正好在实习中可能准备不充分,于是就参加了E轮。其实就是三个算法题,但和一般的算法题区别很大(这里不详细说了),鉴于我不太熟悉这种模式,而且自己水平也不够好,只解出了这三题的small dataset,不久后就收到了Google的拒信。

2401_84919679的博客 906

字节跳动历年Android中高级面试题全收录!最强技术实现

前言 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~。 学算法真的很痛苦,虽然大数据现在很火,但找到适合自己定位的职业也未尝不是一种合理选择。 投百度的经历非常坎坷,想写出来和大家分享一下,希望能带给和我一样准备不是非常充分(无对口项目、无实习经历、渣硕算法中途转Android开发)的同学一些信心。 百度一开始是想找学弟内推的,但是我投的比较早(8月份),赶上了内推的时间,但仍然走的是正式批的流程。做笔试题的时候,三道算法题只做出来第一道,之前经历了

m0_57066201的博客 213

因为三道算法题,被Google给刷了,靠着这份字节的算法学习笔记,进军字节跳动Android开发岗位!

希望大家能有一个好心态,想进什么样的公司要想清楚,并不一定是大公司,我选的也不是特大厂。当然如果你不知道选或是没有规划,那就选大公司!希望我们能先选好想去的公司再投或内推,而不是有一个公司要我我就去!还有就是不要害怕,也不要有压力,平常心对待就行,但准备要充足。最后希望大家都能拿到一份满意的 offer!如果目前有一份工作也请好好珍惜好好努力,找工作其实挺累挺辛苦的。以上进阶BATJ大厂学习资料可以免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。如果需要PDF版本可以在群文件夹里,自行领取!

2401_84010224的博客 378

字节跳动简历冷却期_题库 | 字节跳动校招研发岗位笔试编程题型介绍及解析 第 5 期...

题目1:给你一个矩阵,里面有‘#’,表示障碍,‘.’表示空地,‘S’表示人开始的位置,‘E’表示箱子的预期位置,‘0’表示箱子的初始位置,你的任务是把箱子从‘0’推到‘E’。注意不能将箱子推到‘#’上,也不能将箱子推出边界;现在给你游戏的初始样子,你需要输出最少几步能够完成游戏,如果不能完成,则输出 - 1.输入描述:第一行为 2 个数字,n,mn,m,表示游戏盘面大小有nn 行mm 列...

weixin_33695092的博客 274

不愧是字节,这薪资。。。

1: 字节 2023 年秋招工资前有PICO裁员,后有朝夕光年大规模业务收缩。年底了,字节的薪资还能跳的动吗?很多人充满了好奇,那我们一起来看看。下面是字节 2023 年秋招工资几点总结:首先说说算法岗位,这可是个高薪领域。普通水平的算法工程师年薪大概在40万到55万之间;后端开发的话,36w到48w区间,主要还是看个人能力;测开比后端/算法低 2~3k,测开和开发同薪同酬基本不太存在。另外,字节...

tanqingbo的博客 8714
上一篇: 藏在Java数组的背后,你可能忽略的知识点
下一篇: 一位三本菜鸟跳槽却被源码暴锤,23天狂学Spring,终入大厂
Java斗帝之路
博客等级 码龄7年 2392粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值