算法面试题汇总(更新中)

1、根据数字返回相应位置数字 

def get_digit(num, i):# i=0 个位 1 十位 2 百位...return num // (10 ** i) % 10# print(get_digit(12345, 6))

2、列表反转,不用内置函数

def reverse_list(li):n = len(li)for i in range(n // 2):li[i], li[n-i-1] = li[n-i-1], li[i]return li# print(reverse_list([1,2,3,4,5,6]))

 3、数字反转,不用切片,不用内置函数

# 123->321 12300->321
def reverse_int(num):is_neg = Falseif num < 0:is_neg = Truenum = -1 * numres = 0while num > 0:res = res * 10res += num % 10num = num // 10if is_neg:res = res * -1return res# print(reverse_int(-123001))

4、数字转列表

def int2list(num):li = []while num > 0:li.append(num % 10)num = num // 10li.reverse()return li# print(int2list(123456))

5、一段n个台阶组成的楼梯,小明从楼梯的最底层向最高层处前进,他可以一次迈一阶或两阶,问:他有多少种不同的走法?

def func(n):if n==0 or n==1:return 1else:return f(n-1)+f(n-2)

6、按照单词反转给定句子。例如,输入"what is your name",返回"name your is what"。请不要使用诸如''.split, [::-1]等时间/空间复杂度不是O(1)的函数

def str_reverse(str,i,j):while i<j:str[i],str[j]=str[j],str[i]i+=1j-=1
def sentence_reverse(sentence):sent_list = list(sentence)i=0len_list = len(sent_list)while i<len_list:if sent_list[i] !=' ':start = iend=start+1while (end<len_list) and (sent_list[end]!=' '):end += 1str_reverse(sent_list,start,end-1)i = endelse:i+=1sent_list.reverse()return(''.join(sent_list))

栈,队列相关

括号匹配问题:给一个字符串,其中包含小括号、中括号、大括号,求该字符串中的括号是否匹配

def brace_match(s):stack = []d = {'(':')', '[':']', '{':'}'}for ch in s:if ch in {'(', '[', '{'}:stack.append(ch)elif len(stack) == 0:print('多了右括号%s' % ch)return Falseelif d[stack[-1]] == ch:stack.pop()else:print('括号%s处不匹配' % ch)return Falseif len(stack) == 0:return Trueelse:print("剩余左括号未匹配")return Falseprint(brace_match('[]{{}[]{()})}'))

用两个栈实现队列

class QueueStack(object):def __init__(self):self.l1 = []self.l2 = []def push(self,a):self.l1.append(a)def pop(self):if not self.l2:for i in range(len(self.l1)):a = self.l1.pop()self.l2.append(a)if self.l2:return self.l2.pop()else:return False

一行代码模拟 Linux 中的 tail

# import queue # 不能设置大小
from collections import deque# q = deque()  # 双向队列,可以设置大小,超过大小,后进队的数据会使前进队的数据被丢掉
# q.append(1)
# q.append(2)
# q.append(3)
# print(q.popleft())
# head tail# print(deque(open('test.txt', 'r', encoding='utf-8'), 5))

 给两个字符串st,判断t是否为s的重新排列后组成的单词:

  • ns = "anagram", t = "nagaram", return true.
  • ns = "rat", t = "car", return false.
class Solution:def isAnagram(self, s, t):dict1 = {}   # 用字典来维护字符的数量dict2 = {}for ch in s:dict1[ch] = dict1.get(ch, 0) + 1   # 没有就新建,有就加1for ch in t:dict2[ch] = dict2.get(ch, 0) + 1return dict1 == dict2"""
输入:"anagram","nagaram"
输出:true
Runtime: 32 ms
"""

给定一个m*n的二维列表,查找一个数是否存在。

  列表有下列特性:

  • 每一行的列表从左到右已经排序好。
  • 每一行第一个数比上一行最后一个数大。
  • leetcode地址:https://leetcode.com/problems/search-a-2d-matrix/description/

  

class Solution:def searchMatrix(self, matrix, target):h = len(matrix)  # 高if h == 0:return Falsew = len(matrix[0])  # 列if w == 0:return Falseleft = 0right = w * h - 1while left  <= right:mid = ((left + right)) // 2i = mid // wj = mid % w  if matrix[i][j] == target:return Trueelif matrix[i][j] > target:right = mid - 1else:left = mid + 1else:return False

给定一个列表和一个整数,设计算法找到两个数的下标,使得两个数之和为给定的整数。保证肯定仅有一个结果。

  • leetcode地址:https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/description/
  • 例如,列表[1,2,5,4]与目标整数3,1+2=3,结果为(0,1).
# [2,1,3,5] 4
# 第一种:循环 O(n^2)
def two_sum_1(li, num):for i in range(len(li)):for j in range(len(li)):if i != j:if li[i] + li[j] == num:return i, jreturn -1,-1# 循环减半O(n^2)
def two_sum_1_1(li, num):for i in range(len(li)):for j in range(i+1, len(li)):if li[i] + li[j] == num:return i, jdef bin_search(li, val, low, high):while low <= high:  # 只要候选区不空,继续循环mid = (low + high) // 2if li[mid] == val:return midelif li[mid] < val:low = mid + 1else:  # li[mid] > valhigh = mid - 1return -1# 第二种:固定一个,查找一个,查找用二分,要求有序 O(nlogn)
def two_sum_2(li, num):for i in range(len(li)):a = li[i]b = num - aj = bin_search(li, b, i+1, len(li)-1)if j >= 0:return i, j# 第三种:左右互搏,要求有序 O(n)
def two_sum_3(li, num):i = 0j = len(li)-1while i < j:s = li[i] + li[j]if s == num:return i, jelif s < num:i += 1elif s > num:j -= 1return -1,-1# 第四种:用字典,字典是O(1),不要求有序 O(n)
def two_sum_4(li, num):dic = {}for i in range(len(li)):a = li[i]b = num - li[i]if b not in dic:dic[a] = ielse:return dic[b], i# 2-sum问题
# 无序列表: 4哈希表(最优)
# 有序列表: 3两边找(最优)# 3-sum问题
# 1.暴力枚举法 O(n^3)
# 2.二分查找   O(n^2logn)
# 3.两边找     O(n^2) (最优,不占空间)
# 4.哈希表     O(n^2) (次优)# 2-sub问题
# 哈希表    O(n) 定住一个找两个

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在python中os_在Python中使用os.execvp

我有一个关于在 Python中使用os.execvp的问题.我有以下用于创建参数列表的代码&#xff1a; args [ "java" , classpath , "-Djava.library.path" lib_path() , ea , "-Xmx1000m" , "-server" , "code_swarm" , params ] …

WEBGL学习【四】模型视图矩阵

<html lang"zh-CN"><!--服务器运行地址&#xff1a;http://127.0.0.1:8080/webgl/LearnNeHeWebGL/NeHeWebGL4.html--> <head><title>NeHes WebGL</title><meta charset"UTF-8"/><!--引入需要的库文件--><scr…

使用Jmeter对mysql进行性能测试入门

使用Jmeter对mysql进行性能测试入门 第一步&#xff1a;测试环境准备&#xff1a; 1&#xff09;、mysql> select version(); ----------- | version() | ----------- | 5.5.13 | ----------- ms数据库数据&#xff1a; mysql> select count(*) from account; ----------…

算法基础之数据结构

whats the 数据结构 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。 简单来说&#xff0c;数据结构就是设计数据以何种方式组织并存储在计算机中。 比如&#xff1a;列表、集合与字典等都是一种数据结构。 通常情况下&#xff…

soap接口怎么不返回tuple python_Python 中的接口

Python 是动态类型语言, 只在运行时做 Duck Typing 检查.利: 灵活, 方便弊: 代码混乱, 缺少规范标准自带两类接口支持: abc 和 typing.Protocol, 有他们协助给天马行空的程序员套上枷锁, Python 的大工程才可以"上道"abcabc 就是 Abstract Base Class, 虚基类. 跟 Ja…

java 第11次作业:你能看懂就说明你理解了——this关键字

this 代表当前对象 转载于:https://www.cnblogs.com/qingyundian/p/7736699.html

c#多线程操作界面控件的简单实现

一个小功能&#xff0c;早有人实现了。自己在一个项目中用到&#xff0c;觉得有必要记录一下&#xff0c;写下来。代码 从上面你可能已经看出如何多线程操作同一个控件的&#xff0c;就是通过一个委托&#xff0c;然后定义委托方法&#xff0c;判断控件的InvokeRequired属性&am…

ssh 免密_Linux下配置SSH免密通信 “sshkeygen”的基本用法

利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序&#xff0c;后来又迅速扩展到其他操作平台。1 什么是SSH引用百度百科的说明:SSH 为 Secure Shell的缩写&#xff0c;由 IETF 的网络小组(Network Working Group)所制定&#xff1b;它是…

Python 第三方模块之 NumPy - 科学计算

NumPy 简介 NumPy 发展历史 1995年 Jim HugUNin开发了Numeric。随后&#xff0c;Numarray包诞生。Travis Oliphants整合Numeric和Numarray&#xff0c;开发Numpy&#xff0c;于2006年发布第一个版本。Numpy&#xff08;Numeric Python&#xff09;提供了许多高级的数值编程工…

keepalived与lvs结合使用配置实例

keepalived可以实现两大功能是&#xff1a;健康检测和故障转移 keepalived.conf的配置 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950global_defs {notification_email { acassenfirewall.loc failoverfirewall.loc sysadminf…

保证你现在和未来不失业的十种关键技术

在当今的IT就业市场&#xff0c;有人欢喜有人忧。有人对目前的工作和薪水很满意&#xff0c;有人目前正面临着下岗&#xff0c;或者已经下岗…… 可能你是公司里唯一谙熟某项关键技术的高手&#xff0c;缺了你&#xff0c;公司便玩不转了&#xff1b;也可能你所在的公司对你现…

python设置时间步长与时间离散格式_python怎么定义时间

Python 的 Decorator在使用上和Java/C#的Annotation很相似&#xff0c;就是在方法名前面加一个XXX注解来为这个方法装饰一些东西。但是&#xff0c;Java/C#的Annotation也很让人望而却步&#xff0c;太TMD的复杂了&#xff0c;你要玩它&#xff0c;你需要了解一堆Annotation的类…

Python 第三方模块之 matplotlib - 绘图库

简介 matplotlib是受MATLAB的启发构建的。MATLAB是数据绘图领域广泛使用的语言和工具。MATLAB语言是面向过程的。利用函数的调用&#xff0c;MATLAB中可以轻松的利用一行命令来绘制直线&#xff0c;然后再用一系列的函数调整结果。 matplotlib有一套完全仿照MATLAB的函数形式…

python 笔记(三) 断言(assert)

用来调试程序的时候用&#xff0c;当程序有误时&#xff0c;强制抛出异常转载于:https://www.cnblogs.com/wangkeblog/p/7746022.html

网站程序员的程序员成长之路大概分几个阶段 和未来的发展

信息技术的更新速度是惊人的&#xff0c;程序员的职业生涯则是一个要求不断学习的过程&#xff0c;如何才能成为一名合格的程序员&#xff0c;一名合格的程序员需要掌握哪些技能呢&#xff1f;为此天天招生网采访到几位孳生的程序工作人员&#xff0c;就如何做好一名成功的程序…

微软P2V工具之Disk2VHD

虚拟化经过最近几年的发展&#xff0c;已经有很多的应用和服务迁移到了虚拟化的平台上了。在实施虚拟化的过程中就会涉及到将原来老旧的服务器来迁移到虚拟化平台的运行&#xff0c;这就是P2V&#xff0c;物理机转换为虚拟机。谈到P2V大家会想到很多的工具&#xff0c;例如Vmwa…

生成n套数位加减乘除_leetcode 算法汇总(四)位运算

一、 运算符& 与运算&#xff1a; 两个位都是 1 时&#xff0c;结果才为 1&#xff0c;否则为 0| 或运算&#xff1a; 两个位都是 0 时&#xff0c;结果才为 0&#xff0c;否则为 1^ 异或运算&#xff1a; 两个位相同则为 0&#xff0c;不同则为 1~ 取反运算&#xff1a;0 …

机器学习算法之 K-means、层次聚类,谱聚类

k-means 和层次聚类都属于划分聚类&#xff0c;实际中最常用的是k-means&#xff0c;k-means效果不好的情况下才会采用其他聚类 K-means算法 K-means算法&#xff0c;也称为K-平均或者K-均值&#xff0c;是一种使用广泛的最基础的聚类算法 假设输入样本为TX1,X2,…,Xm;则算法…

vue数据请求

我是vue菜鸟&#xff0c;第一次用vue做项目&#xff0c;写一些自己的理解&#xff0c;可能有些不正确&#xff0c;欢迎纠正。 vue开发环境要配置本地代理服务。把config文件加下的index.js里的dev添加一些内容&#xff0c; dev: {env: require(./dev.env),port: 8090,autoOpenB…

jetty部署多个web应用及将jetty配置成服务

通常情况下一个jetty部署一个java web应用&#xff0c;但一台服务只部署一个应用可能会造成资源浪费&#xff0c;所以有时候可能在一台服务器上要部署多个web应用。下面我们以一台server部署两个web应用为例。 服务器环境&#xff1a;安装JDK&#xff0c;2个jetyy9 重点&#x…