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))

给两个字符串s和t,判断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) 定住一个找两个

算法面试题汇总(更新中)相关推荐

  1. 力扣高频|算法面试题汇总(七):树

    力扣高频|算法面试题汇总(一):开始之前 力扣高频|算法面试题汇总(二):字符串 力扣高频|算法面试题汇总(三):数组 力扣高频|算法面试题汇总(四):堆.栈与队列 力扣高频|算法面试题汇总(五):链 ...

  2. 算法面试题汇总 leetcode

    算法面试题汇总 leetcode

  3. 2018 年力扣高频算法面试题汇总-难题记录-鸡蛋掉落

    题目描述: 你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N  共有 N 层楼的建筑. 每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去. 你知道存在楼层 F ,满足 0 <= F ...

  4. leetcode 最常见的前端基础算法面试题汇总

    目录 二叉树 二叉树前中后遍历套路详解 对称二叉树 二叉树的最大深度 将有序数组转化为二叉搜索树 栈 有效的括号 最小栈 动态规划 最大子序和 爬楼梯 数学问题 加一 x的平方根 Excel表序列号 ...

  5. 最近面试的几个大厂算法面试题汇总

    最近接受了一波社会毒打,几个大厂都经历了好几轮技术面试,面试形式有电话.语音.视频.现场面,内容主要集中在以往工作经历及项目经验.算法知识及理论.算法编程及工程能力.场景案例及分析,好在面试结果比较满 ...

  6. 2021最新汇总数据结构与算法面试题(准备面试的可以看看)

    闲来无事整理了一下数据结构与算法面试题,准备面试的可以看看. 这份面试题汇总除了Java语言的,我还整理了C++和Golang语言的,无论你是做什么开发这份数据结构与算法面试题汇总都可以看,如果你是做 ...

  7. 【机器学习算法面试题】四.深度神经网络中激活函数有哪些?

    欢迎订阅本专栏:<机器学习算法面试题> 订阅地址:https://blog.csdn.net/m0_38068876/category_11810806.html [机器学习算法面试题]一 ...

  8. 现实中的算法面试题(已拿Offer)赚到了,赚到了

    算法面试题 阅读目录 写在前面 算法百科 算法题目 参考答案 博客总结 博客前言 有提到分享一下面试题,最近也是才能新公司入职没多久,忙着熟悉环境,加上前不久出去玩了一趟(顺便写了篇游记,感兴趣的可以 ...

  9. leetcode常见经典算法面试题及答案汇总

    精心整理了leetcode常见经典算法面试题及答案,实现语言为python和c++,整理在这里主要是为了面试前复习使用,希望对您有所帮助,题目比较多建议您先收藏 题目:1.求缺失的第一个正数;2. 字 ...

最新文章

  1. TVM性能评估分析(六)
  2. linux文件需求管理,CaliberRM 需求管理系统
  3. JDK,JRE,JVM及设置PATH
  4. css div 垂直居中设置
  5. java中servletcontext_java中获取ServletContext常见方法
  6. 把windows装到linux下,如何将WSL(Windows Subsystem for Linux 2)安装到Windows 10?
  7. 如何使用iToolab FixGo for mac修复iPhone/iPad的系统问题
  8. 字符串模式匹配sunday算法
  9. Linux服务器基本安全加固
  10. python微博数据分析_用python处理微博JSON数据范例
  11. OceanBase分区表使用
  12. 苹果电脑桌面找不到计算机,苹果电脑MacBook桌面正下方的图标消失不见的解决方法...
  13. jax-rs jax-ws_了解WS-Policy
  14. 《人月神话》一句话总结各章核心观点
  15. Android applink 踩坑指南
  16. centos安装minikube
  17. 20140723曙光-测试开发工程师-实习面试
  18. 《模拟电子技术基础》课程笔记(二)——课程概要
  19. MT6572_6582_GPS_clock_load_setting_SOP_v1.2 下载
  20. 安卓获取电池广播/电池状态/电池电压/电池电流的方法

热门文章

  1. Linux学习笔记(二)
  2. 中国历史上影响最大的10首诗
  3. 264中 POC的计算方法
  4. intellij idea 中去除 @Autowired 注入对象带来的红色下划线报错提示
  5. git 图形化工具 GitKraken 的使用 —— 分支的创建与合并
  6. sublime 自定义快捷键
  7. vim学习笔记(4)帮助与配置
  8. SqlBulkCopy 批量复制数据到数据表
  9. EDM的九大用途盘点
  10. 线程----BlockingQueue