面试手写算法题总结

前端面试系列六:手写程序算法题 快来加入我们吧! "小和山的菜鸟们",为前端开发者提供技术相关资讯以及系列基础文章。为更好的用户体验,请您移至我们官网小和山的菜鸟们 ( https://xhs-rookies.com/ ) 进行学习,及时获取最新文章。 "Code tailor" ,如果您对我们文章感兴趣、或是想提一些建议,微信关注 “小和山的菜鸟们” 公众号,与我们取的联系,您也可以在微信上观看我们的文章。每一个建议或是赞同都是对我们极大的鼓励! 面试系列不定期更新,请随时关注 前言 本篇专栏重点在于讲解面试中 手写程序题/算法题 阅读详情

1.Two Sum问题,给定一个数组 nums找到数组中两个数之和为给定值所有或者(找到即可)组合。

暴力搜索效率很低,这里用类似双指针可以让时间复杂度达到O(N)

def two_sum(nums, target):
    res = []
    nums.sort()
    if len(nums) < 2:
        return res
    elif nums[0] >= target:
        return res
    else:
        begin = 0
        end = len(nums)-1
        while begin < end:
            if nums[begin] + nums[end] == target:
                temp = [nums[begin], nums[end]]
                res.append(temp)
                begin += 1; end -= 1
            elif nums[begin] + nums[end] > target:
                end -= 1
            else:
                begin += 1
        return res
nums = [1, 3, -2, 0, 5, 4, 6, 4, 7]
target = 9
print(two_sum(nums, target))

还有利用python里的字典来解决的(这里返回的是索引,当然也可以返回具体的值,不太明白这里的复杂度是多少):

def twoSum(num, target):
    dict = {}
    for i in range(len(num)):
        x = num[i]
        if target - x in dict:
            return (dict[target - x], i)
        dict[x] = i
num = [-3,-2,0,1,2,4,5,7,-1]
print(twoSum(num, 12))

2. threesum问题: 

def threeSum(nums):
    res = []
    length=len(nums)
    if length<3:return res
    nums.sort()
    for i in range(length):
        if nums[i]>0:break
        if i>0 and nums[i]==nums[i-1]:continue
        begin=i+1;end=length-1
        while begin < end:
            sum=nums[i]+nums[begin]+nums[end]
            if sum==0:
                tmp=[nums[i],nums[begin],nums[end]]
                res.append(tmp)
                begin+=1;end-=1
                while begin < end and nums[begin] == nums[begin - 1]: begin += 1
                while begin < end and nums[end] == nums[end + 1]: end -= 1
            elif sum>0:end-=1
            else:begin+=1
    return res
nums = [-1,0,1,7,-6,3,5]
print(threeSum(nums))

更新threeSum问题:(指定一个数,然后用两个指针类似于二分查找)

def threeSum(nums):
    ans = []
    nums.sort()
    for i in range(len(nums) - 2):
        if i == 0 or nums[i] > nums[i - 1]:  # 如果后个和前个相等,那么后一个能实现相加为target必然和前面重复
            left = i + 1
            right = len(nums) - 1
            while left < right:
                target = nums[left] + nums[right] + nums[i]
                if target == 0:
                    ans.append([nums[i], nums[left], nums[right]])
                    left += 1
                    right -= 1
                    while left < right and nums[left] == nums[left-1]:  # skip duplicates
                        left += 1                                       #两个while也体现了一点点分治
                    while left < right and nums[right] == nums[right+1]:#这两个while可以一直跳转到最后的
                        right -= 1                                      #数的位置如[-2,0,0,2,2]跳转到3,2
                elif target < 0:                                        #注意while最后的状态是第一个不满足条件的位置
                    left += 1
                else:
                    right -= 1
    return ans

3. 最长递增子序列问题:

用贪心的思想:(从前往后,每个数做标记,当前数上的标记为前面比他小的数上最大标记+1,很容易理解,这样延伸到当前数时可保证是最长的递增序列)代码如下:

def dp(nums):
    d = [0]
    re = [[0] for k in nums]
    for i in range(1, len(nums)):
        for j in range(i):
            if nums[j] < nums[i]:
                re[i].append(d[j]+1)
        d.append(max(re[i]))
    return max(d)+1
nums = [1,3,2,4]
print(dp(nums))

用动态规划来做:

4. 求字符串最长回文子串的长度(回文子串即是对称的连续子串)中心展开法,考虑bb这种所以每个字符插入‘#’:

def func(arr):
    re = []
    new_arr = ''
    for i in arr:
        new_arr += i+'#'
    for i in range(2, len(new_arr)-2, 2):
        j = 1
        count = 0
        while i-j >= 0 and i+j <= len(new_arr)-1:
            if new_arr[i-j] == new_arr[i+j]:
                count += 1
                j += 1
            else:
                break
        re.append(count)
    return max(re)+1

arr = 'cabacd'
print(func(arr))

快手面试算法题合集 1.力扣原题:最长不重复序列 import java.util.*; public class kuaishou { public static void main(String[] args){ Scanner in=new Scanner(System.in); String s=in.nextLine(); System.out.println(longestPalindrome(s)); } public static String longest 阅读详情

相关推荐

字节跳动面试前端岗,刷算法题有救吗?

在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来。 去年,有位学长参加秋招的时候,拿到了字节跳动、快手、阿里、美团……等等 7 家大厂的 Offer,在此之前,学长一直“默默无闻”,基本可以说是在秋招一战成名,成为众多学弟学妹羡慕的对象。 今年,伴随着疫情的影响,就业形势并不乐观,春招也早已过去,毕竟毕业之后的第一家公司,决定了以后工作的起点。为此,我们特意邀请了这位学长来做了分享,因为他最后选择了字节跳动,就以字节跳动为例,分享

m0_67403272的博客 610

2022最新算法分析及手写代码面试解析

思路说明斐波那契数列的排列是0,1,1,2,3,5,8,13,21,34,55,89,144……因为F(n)=F(n-1)+F(n-2),所以要求F(n)首先要求出F(n-1)和F(n-2),而F(n-1)=F(n-1-1)+F(n-1-2),以此类推,直到,F(2)=F(1)+F(0)为止,已知F(1)=1,F(0)=0。673.有一个已经排好序的整数数组,其中存在重复元素,请将重复元素删除掉,例如,A=[1,1,2,2,3],处理之后的数组应当为A=[1,2,3]。...

老男孩的架构路 325

倍福Beckhoff运动控制功能块实战解析:从MC_ReadActualPosition到MC_GearInVelo

本文深入解析倍福(Beckhoff)TwinCAT运动控制功能块,从基础的MC_ReadActualPosition、MC_Power等轴状态读取与使能操作,到MC_MoveAbsolute、MC_MoveRelative等单轴定位指令,并重点剖析了用于动态速度同步的核心功能块MC_GearInVelo在飞锯等场景的应用。文章结合实战经验,详细介绍了齿轮耦合、电子凸轮(MC_CamIn)等高级同步功能的参数配置、调试技巧及常见问题,旨在帮助工程师快速掌握倍福运动控制工具箱,实现复杂的同步工艺。

transformer2023的博客 981

手写代码算法题和智力题

一 实现memcpy函数 二 大数相乘问题 三全排列函数的实现 四编写atoiitoa函数 五 要求编写一个函数来打乱一个字符串的顺序 六 求逆序对 七 满二叉排序树求三个结点的最小公共父节点 八 实现strstr函数 九 智力题毒酒问题 十 如何实现LRU算法 十一设计一个数据结构实现三个函数void setValueint index int value int getValueint inde

小拳头的博客 4036

Docker新手必看:解决‘Unable to find image’错误的完整指南

本文针对Docker新手常见的‘Unable to find image’错误,提供了完整的排查与解决指南。文章深入剖析了权限不足、网络连接失败、Docker服务未运行等核心原因,并给出了将用户加入docker组、配置镜像加速器等实用解决方案,帮助读者彻底理解并解决镜像拉取问题。

weixin_29230901的博客 244

(四)美赛画图篇:画图模板+画图工具

美赛画图篇:画图模板+画图工具(一)画图模板(二)画图工具 因为散点图、折线图等多与数据有关,且需相关软件生成,故此处多是通用模板。直接替换文字内容即可。 (一)画图模板 1、Visio圆圈图 适合于:指标体系(E题常用) 点击下载:1 C币 如果不想花费且时间充足,悄咪咪地说,在visio-模板搜索可以找到很多。(稍微会耗一点时间) 2、简单指标体系图PPT 适合于指标体系 点击下载:0 C币...

weixin_43689393的博客 1万+

循环和数组大厂手写算法题练习

循环数组大厂实习面试手写练习

Java和网络安全学习交流 205

基于 STM32 单片机的实验室多参数安全监测系统设计与实现

本系统以 STM32F103C8T6 单片机为核心,集成温湿度监测、烟雾检测、气体泄漏报警、人体移动监测等功能模块,通过 OLED 显示屏实时显示数据,并支持 Wi-Fi 远程传输。系统可对实验室异常环境参数(如高温、烟雾、燃气泄漏)及非法入侵实时报警,保障实验室安全。本文从硬件选型、电路设计到软件实现提供了完整的实验室安全监测系统方案,可根据实际需求调整传感器类型和通信方式,适用于科研、教学等场景的环境安全防护。:可增加继电器模块控制通风设备或切断电源,集成 ZigBee 组网实现多实验室联动监测。

weixin_42300449的博客 1285

BAT面试官好喜欢问的几道算法题!ps:【还得让你手写】

点击上方"蓝字",右上角选择“设为星标”周一至周五早8点半!精品技术文章准时送上!公众号后台回复 “学习” ,获取作者独家秘制学习套餐 String 作为最常...

石杉的架构笔记 664

SAM3 几行代码支持任意图像分辨率,减少显存占用(针对transformers库)

几行代码让sam3支持任意图像分辨率

qq_41234663的博客 156

从零开始学习PX4源码0(固件下载及编译)

本节主要记录从零开始学习PX4源码1(固件下载)的过程,欢迎批评指正!!!下载固件主要分为两个版本,之前稳定版本和最新官网发布版本,为什么要下载两个版本,主要是说明两个版本有一定的差异(开发环境及源码文件格式等),我们是从之前版本开始学习,为什么不从最新的?因为之前版本代码文件格式还是固定的,最新的变化很大,不利于初学者学习,apm和px4不好的地方就是之前版本v1.7.2和最新版本v1.14.0有些文件总是在变化,这样很不好。

陌城烟雨 4616

常见算法题

给定数组和目标值,找出两数之和等于目标值的下标。:不使用库函数,手写一个字符串反转函数。当遇到重复字符,左指针右移,直到无重复。:去掉数组中重复的数字(不排序)LRU 缓存机制(哈希+双链表)Top K 问题(堆/优先队列):判断字符串是否是回文。维护当前窗口内的字符。合并两个有序数组/链表。

m0_73721715的博客 312

高分SCI讨论部分必学AI写作套路!仅需五步结合GPT‑5辅助,让你的SCI论文更有说服力(附实用AI提示词)

对于很多写SCI论文的学术人来说,其实“讨论部分”才是最致命的,网上虽然有大量的写作技巧和模板提供参考,但往往让人眼花缭乱,还是不知道如何下手。即便是下手了,也很难兼顾学术性与可读性,实际上讨论部分的难点并不在于写,而在于你能研究结果说清楚。今天七哥教你借助GPT-5,用五步法结合精心设计的AI提示词,让你能在科学逻辑与语言表达上一次性解决“讨论部分”的结构、内容、润色和翻译问题,轻松写出符合高分SCI期刊要求的讨论段落。

智能AI让学术科研更容易 1330

面试题有基础算法题要求都是手写一些数据结构,例如栈,队列,双端队列,堆并且采用例如数组,列表这种底层结构构造

米哈游面试算法题: 手写双端队列(数组实现) 双端队列含义 实现:

qq_23923713的博客 336

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java面试手写单链表_学会这几道链表算法题,面试再也不怕手写链表了

学会这几道链表算法题,面试再也不怕手写链表了> 笔者文笔功力尚浅,如有不妥,请慷慨指出,必定感激不尽在面试的时候经常被问到让手写关于链表的代码,下面几个都是我在面试中被问到过的问题。当然我写的不一定是最优解,如果有更好的解决办法欢迎大家指出。便于大家观看,我先将题目列出删除链表中倒数第N个节点链表反转合并两个有序链表求链表的中间节点删除链表中倒数第N个节点题目:给定一个链表,删除链表的倒数第...

weixin_42361283的博客 321

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

hash相关的面试常见算法题,手写这些算法题,面试想不过都难

有效的字母异位词(亚马逊、Facebook、谷歌在半年内面试中考过) Solution import java.util.HashMap; /** * 异位词 * * @Author: zhangwbin * @Date: 2020/5/25 */ public class Solution242 { public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { ret..

null_equals的专栏 276

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java 笔试 手写,[Java教程]iOS套路面试题之必考笔试手写算法题

[Java教程]iOS套路面试题之必考笔试手写算法题0 2020-11-25 17:25:49 作为开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:761407670,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!以下基本上以C语言实现为主1.不用中间变量,用两种方法交换A和B的值?// 1....

weixin_42298437的博客 140

中大厂前端面试总结

前言 本次面试面试了很多家公司,包括 360,美团,猿辅导,小米,腾讯地图,头条,新东方,快手,知乎等几家公司,刚开始去面试的时候那段时间状态不是很好(基本每天都加班到很晚,周六日也没有休息的那种,而且当时心态真的是差到爆,很多平时自己很会的东西,被问到居然答不上来),基本一面就挂的那种(360,美团,猿辅导),越面越失望,后来就直接不面试了,调整自己的状态,请假休息,好好睡了两天两夜之后,调整自己的心态,开始准备面试,接下来的面试就顺利的很多。 本篇面试题总结并没有按照公司那样分类而是按照知识点进行简

大灰狼的小绵羊哥哥的博客 2012

4-4 Python白板编程(手写代码)

一、什么是白板编程 传说中的手写算法题,白纸或者白板上手写代码 1.对于没有参加过 ACM/蓝桥杯之类算法竞赛的同学比较吃亏 2.刷题。LeetCode,《剑指offer》,看github题解 3.最近某大型互联网公司多年经验跳槽出来因为算法题面挂小公司 二、为啥要手写算法题 工作用不到,为啥还要考? 1.有些公司为了筛选编程能力强的同学,近年来对算法要求越来越高 2.针对刚出校门的同学比较多,有经验的反而算法考得少(偏工程经验) 3.竞争越来越激烈,大家水平差不多的优先选取有算法竞赛经验的。 三、如何准备

元文的博客 1201

java面试算法题是手写吗,java面试官,Java高并发项目案例

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

2301_79987255的博客 672

前端面试常考手写算法题(1)

【代码】前端手写9.21。

m0_71288644的博客 400

java 链表反转_学会这几道链表算法题,面试再也不怕手写链表了

前言写文不易,欢迎大家一起交流,喜欢文章记得关注我点个赞哟,感谢支持!(文末还有福利和彩蛋哟~,更多精彩内容关注专栏《java牛人集结地》)java牛人集结地​zhuanlan.zhihu.com学会这几道链表算法题,面试再也不怕手写链表了笔者文笔功力尚浅,如有不妥,请慷慨指出,必定感激不尽在面试的时候经常被问到让手写关于链表的代码,下面几个都是我在面试中被问到过的问题。当然我写的不一定是最优解,...

weixin_39923599的博客 99

2 年前端,如何跟抖音面试官 battle

这是一场拳击手与拳击手的较量。芜湖,起飞!!!自我介绍首先上来就是唠,介绍,以及之后,面试的自我介绍阶段就结束了。ps :这里通过自己的话术成功将面试官的注意力吸引到项目优化方向,经过2分钟的自我介绍,面试官也应该读完的简历了,算是达到自己目标的预期了。简历相关ps :这里答的中规中矩,因为自我介绍时,已经引导完面试官了,所以~ 嘿嘿嘿~小面试官,看我碰不碰你就完了,让你傲娇。WebPackps :之后这里有跟随着这道题又结合项目说了大概有10分钟,面试开头还算不错的。PS :没答上来,面试官三个单词一起说

2401_86343919的博客 787

ios笔试题算法_iOS套路面试题之必考笔试手写算法题

作为开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:761407670,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!以下基本上以C语言实现为主1.不用中间变量,用两种方法交换A和B的值?// 1.中间变量void swap(int a, int b) { int temp = a; a = b; b = temp;...

weixin_39622521的博客 120

2024 前端JavaScript高频手写面试题大全,助你查漏补缺

今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。所以看完之后,还是多多行动起来吧!可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。this._status = STATUS.FULFILLED // 更改状态。

2401_84097696的博客 997
上一篇: python求二叉树深度和宽度
下一篇: python返回数组的索引
丶limit__
博客等级 码龄9年 3粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值