Leetcode经典面试题 – 第3周

题目来源于Leetcode
报了一个百面机器学习面试的课程
每周都有定时打卡的作业
都是常出现于面试中的题
总结在此,时常温习,
刷题小能手们觉得写的不错可以移步个人主页
(ps:最近忙着笔试面试,更新太少)


1.字符串(Leetcode 409)

Given a string which consists of lowercase or uppercase letters, find the length of the longest palindromes that can be built with those letters.
给定一串字符串,用其中的字母构成的回文数中,最长的回文数长度是多少

思路

分析易得,最长回文数长度=偶数字符数量(偶数必定可构成)加上奇数字符数量-1(取其中的偶数),再加上出现奇数时单独的字符,如aba

class Solution(object):def longestPalindrome(self, s):from collections import Counterd = Counter(s).items()cnt = 0flag = 0if len(d) == 1:return len(s)for k, v in d:if v % 2 == 0:cnt += velse:flag = 1cnt += v-1return cnt+1 if flag else cnt

2.数组和矩阵(Leetcode 378)

Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth smallest element in the matrix.
给定n x n的矩阵,行列都是递增的顺序,找到其中第k小的数

思路

用到标准库中的chain库,将二维数组转化为一维数组,排序输出即可

from itertools import chaina = sorted(chain(*matrix))return a[k-1]

3.位运算(Leetcode 260)

Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.
给定一组数,其中大部分的数都是出现两次,有两个数只出现了一次,找出他们

Example:
Input: [1,2,1,3,2,5]
Output: [3,5]

思路

  1. 字典记录出现次数,遍历输出
  2. 参考别人的博客,说说自己的见解:首先,要知道异或的性质

n ^ 0 = n
n ^ n = 0

所以,假如数组中只有一个数出现了一次,这个问题就很好办了
数组中的数两两异或之后,出现两次的,自己和自己异或,结果为0
单独出来的那个数与0异或结果还是那个数
返回即可。

这里是两个数出现了一次,两两做完异或之后,相同异或为0
最后得到的是两个数的异或结果

以上面的样例为例,所有数异或的结果是3^5,写作二进制即(011 ^ 101)
结果是110,即十进制的6

结果中的三个数字,最右边的一个0代表两个数相同的部分
左边的1代表两个数的二进制格式不同的部分,可以用“与操作”分开
与操作的蒙版,不同的那一位是1,其余的是零即可
这里可以取10为mask,可以以这个作为基础来将这两个数区别开。
这两个数就是要找的数,具体如下:

2 & 3 = 010 & 011 = 010 = 2
2 & 5 = 010 & 101 = 000 = 0
#上述数组中的所有数与mask与之后的结果为
原始数组:[1,2,1,3,2,5]
原mask与:[0,2,0,2,2,0]
#可以看到,3和5被分在了两边,对两边的数组进行异或之后,去除相同的,就能还原出这两个字符

综上所述,整个查两个单次出现的算法一共分为三步:

  • 一. 两两异或,得到需要判定的两个单次出现的数的异或结果,记作res_xor(样例为6)
  • 二. 根据res_xor,找到第一个为1的位置构建mask(样例为10),继续与数组中的值异或
  • 三. 将所有数依次与mask与,根据被mask分开的两组数,两两异或还原出需要找的数
    ps:最后的操作里,即便数组被mask分成了两组数,但是相同的数会均匀分在两边,不影响最后的值的精确查找。
class Solution(object):def singleNumber(self, nums):# 构建res_xor找到两数的异或结果res_xor = 0for i in nums:res_xor ^= ia = b = res_xor# 根据res_xor构建mask,分组,分开两数mask = 1while mask & res_xor == 0:mask = mask << 1# 分组,异或,还原for i in nums:if i & mask == 0:a ^= ielse:b ^= ireturn [a, b]

4.进制转换(Leetcode 504)

Given an integer, return its base 7 string representation.
转换为7进制

思路

被除数不为0一直循环,倒序输出余数即可

class Solution(object):def convertToBase7(self, num):neg_flag = num < 0n = abs(num)s = ''if n == 0:s += '0'while n:s += str(n % 7)n = n // 7return neg_flag * '-'+s[::-1]

5.相遇问题(Leetcode 462)

Given a non-empty integer array, find the minimum number of moves required to make all array elements equal, where a move is incrementing a selected element by 1 or decrementing a selected element by 1.
给一个非空数组,每次只能减小或者增加1,问需要多少次操作才能把数组里的数值都弄相等

思路

找到中位数,求所有数与中位数之差的和的绝对值即可

class Solution(object):def minMoves2(self, nums):nums.sort()mid = nums[len(nums) >> 1]return sum(abs(x - mid) for x in nums)

6.多数投票问题(Leetcode 169)

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.
给定一个数组,返回数量超过n/2{n}/{2}n/2(向下取整)的数字

思路

统计数量,用到老朋友counter类即可

class Solution(object):def majorityElement(self, nums):from collections import Counterd = Counter(nums).most_common()for k, v in d:if v > (len(nums) >> 1):return k

这里提供一个巧解思路,超过n/2{n}/{2}n/2的数量,则n/2{n}/{2}n/2的位置必定是那个数:

class Solution(object):def majorityElement(self, nums):return sorted(num)[len(nums)>>1]

Leetcode经典面试题 -- 第3周相关推荐

  1. Top 10国际大厂人工智能岗位经典面试题精选

    Top 10国际大厂人工智能岗位经典面试题精选 https://www.toutiao.com/a6635196559355019780/ 2018-12-15 20:31:25 AI专业应届毕业生年 ...

  2. java面试题_阿里大厂流出的数百道 Java 经典面试题

    BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量 ...

  3. java 1.8有没有jshell_收藏了800道Java后端经典面试题,分享给大家,希望你找到自己理想的Offer呀~...

    前言 在茫茫的互联网海洋中寻寻觅觅,我收藏了800+道Java经典面试题,分享给你们.建议大家收藏起来,在茶余饭后拿出来读一读,以备未雨绸缪之需.另外,面试题答案的话,我打算后面慢慢完善在github ...

  4. mysql面试题sql语句_数据库MySQL经典面试题之SQL语句

    数据库MySQL经典面试题之SQL语句 1.需要数据库表1.学生表 Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex ...

  5. 企业运维经典面试题汇总(4)

    1.如何过滤出已知当前目录下yangwen中的所有一级目录(提示:不包含yangwen目录下面目录的子目录及隐藏目录,即只能是一级目录)? 解答: 方法1:通过find直接查找指定类型的文件 [roo ...

  6. 企业运维经典面试题汇总(2)

    1.写一个脚本查找最后创建时间是三天前,后缀是*.log的文件并删除 find .-ctime +3 -name '*.log' | rm -rf 2.统计ip访问情况,要求分析nginx访问日志,找 ...

  7. 收藏了800道Java后端经典面试题,共享给大家

    在茫茫的互联网海洋中寻寻觅觅,我收藏了800+道Java经典面试题,共享给你们.建议大家收藏起来,在茶余饭后拿出来读一读,以备未雨绸缪之需.另外,面试题答案的话,我打算后面慢慢完善在github, 希 ...

  8. 各大厂800道Java后端经典面试题合集

    前言 在茫茫的互联网海洋中寻寻觅觅,我收藏了800+道Java经典面试题,分享给你们.建议大家收藏起来,在茶余饭后拿出来读一读,以备未雨绸缪之需.另外,面试题答案的话,可以私信我, 希望大家都能找到自 ...

  9. 收藏了800道Java后端经典面试题,分享给大家,希望你找到自己理想的Offer呀~

    在茫茫的互联网海洋中寻寻觅觅,我收藏了800+道Java经典面试题,分享给你们.建议大家收藏起来,在茶余饭后拿出来读一读,以备未雨绸缪之需.另外,面试题答案的话,我打算后面慢慢完善在github, 希 ...

最新文章

  1. python统计csv行数_对Python 多线程统计所有csv文件的行数方法详解
  2. vs 设置 调试目录
  3. nodejs正则提取html,Nodejs正则表达式函数之match、test、exec、search、split、replace
  4. Swift - 自定义单元格实现微信聊天界面
  5. asp.net web开发步骤_Web 系统安全性测试之会话管理测试
  6. unity--------------------四元数的旋转与原理
  7. Javascript:json删除键为指定数据的值
  8. ROS机器人程序设计课程反思-2022终篇-
  9. 【阿里云产品使用教程】1. 阿里云VPC ECS SLB NAT初体验 - 上
  10. torch的maximum与max以及导出onnx
  11. 小米路由器r2d_小米路由器R2D固件(路由器刷机更新工具)V2.24.11 免费版
  12. Maxtang大唐英特尔12代J6412无风扇双网口迷你主机真实评测
  13. ios安装fiddler证书
  14. 计算机电池维修心得,CMOS电池引起计算机无法启动的检修详解
  15. 向量的相似度计算常用方法
  16. r5 4650g和r5 5600g选哪个好
  17. 小白兔写话_看图写话小白兔
  18. UbuntuKylin引领我们走上开放创新之路
  19. Javascript(前端知识)----------基础语法
  20. php 科试题,科学网—《数据库系统原理与技术》试题库试题与参考答案选编6 - 程学先的博文...

热门文章

  1. html当前窗口打开页面,JavaScript 在本窗口打开网页
  2. Windows平台在线安装Qt 6.0.0图文教程
  3. 力扣刷题day32|738单调递增的数字、714买卖股票的最佳时机含手续费、968监控二叉树
  4. Failed to compile编译失败
  5. HTML的无序(ul)、有序(ol)、定义(dl)列表标签
  6. txt文档在html中乱码怎么办,txt文件打开显示乱码怎么办?
  7. 论文 | 图理论 | 2021年斯坦福大学Jiaxuan You博士论文《用图赋能深度学习》译读 摘要和感谢
  8. [论文学习] - 2014ECCV - TCDCN
  9. Python网络爬虫——爬取和分析NBA球员排名及各项数据
  10. 网络能力认证CCSC-管理1级 技术1级别