总结三道算法题和一道实操题

智数跃动客
• 阅读 1436

今天给大家总结几道算法题,其中用到了一些不常用的技巧,希望大家和我一样,也能收获一些新东西。

  • 有一个集合,其任意一个元素的对称元素也一定存在于这个集合中,现随机取出一个元素,求这个元素是谁

    • 刚看到这个题的时候我就想,肯定不能用for循环的方式,否则这个题基本上是无意义的,那么问题来了,我该用什么方式,然后因为是集合所以我脑子里又想出来用差集的方式。代码如下:
    • s = {2, 4, 6, -6, -4, -2}
      s1 = s.copy()
      s1.pop()    # 这里就是删除一个元素,再删除一个一样的操作
      el = (s - s1)
    • 这样子行吗,我自己都怀疑我自己,不知道会不会这么简单或者不会这么复杂,然后的然后我没想出来其他的方式,不过后来又知道了一种解法,代码如下:
    •     s = {2, 4, 6, -6, -4, -2}
          s1.pop()
          el = sum(s)*-1  # 根据对称特性,相加等于零,那么就这么解答出来了

      亲测了一下两个的执行效率,几乎是差不多的,不过求差集还会更快些。

  • 在一个列表中只有一个元素存在次数为1,其他都为2,求这个元素

    • 是不是又想到了for,虽然这种问题for可以解决,但是和上一个问题一样,我也觉得使用for是无意义的,那么我们应该怎么解?请看代码:
    • l = [1,2,1,3,4,5,3,4,5]
      
      from functools import reduce
      reduce(lambda x,y:x^y, l)
    1. reduce的使用方式很简单:第一个参数是一个函数(这个函数只能有两个参数),用来处理第二个参数(可迭代对象),第一次执行将第二个参数中前两个元素作为实参参入,然后接下来进入一个循环,将第一次的结果和第三个元素作为实参传入,依此类推...
    2. ^这个表示异或,对左右两侧数的二进制操作,最低位对其,相对的位如何数字不同(1对应0,或者0对应1)那么结果为1,否则为0,所以自身异或自身为0,利用这个特性完成了此题。还有逻辑与,逻辑或,逻辑与就是两个二进制数据相对的位相同为1,不同为0;逻辑或就是两个二进制数据相对的位不同为1,相同为0
  • 一层楼有10级台阶,可以1次1级,2级,或3级的方式上楼,请问走完这10级台阶有几种方式?

    • 这个问题我是有印象的,和斐波那契类似,我把他归为斐波那契变形,当然其实这种问题是属于dp(动态规划)的,我是不懂,所以过程提供给大家:
    • # 这段代码来自我加入的一个交流群的群友
      l = [1,1,2]
      for i in range(3,11):
          l.append(l[i-1]+l[i-2]+l[i-3])  # 这种思维是不是和斐波那契类似呢,你们可以对比一下
      
      l[10]   # 274
  • 某次战役中,为便于信息交互,我军侦察部门将此次战役的关键高地坐标设定为(x=0,y=0)并规定,每向东增加100米,x加1,每向北增加100米,y加1。同时,我军情报部门也破译了敌军向坦克发送的指挥信号,其中有三种信号(L,R,M)用于控制坦克的运动,L 和 R 分别表示使令坦克向左、向右转向,M 表示令坦克直线开进100米,其它信号如T用于时间同步,P用于反转信号,既出现p,后面的信号向左变为向右,向右变为向左,向前变为向后,反之亦然。一日,我军侦察兵发现了敌军的一辆坦克,侦察兵立即将坦克所在坐标(P, Q)及坦克前进方向(W:西,E:东,N:北,S:南)发送给指挥部,同时启动信号接收器,将坦克接收到的信号实时同步发往指挥部,指挥部根据这些信息得以实时掌控了该坦克的位置,并使用榴弹炮精准地击毁了该坦克。假设,侦察兵发送给指挥部的信息如下:坦克坐标:(11,39)坦克运行方向:W,坦克接收到的信号为:MTMPRPMTMLMRPRMTPLMMTLMRRMP,请通过编程计算出坦克所在的位置(编程语言不限)。

    • # 这段代码来自我加入的一个交流群的群友
      import numpy
      
      class Tan():
          def __init__(self, x, y, w):
              w_type = {'E': 0, 'S': 1, 'W': 2, 'N': 3}
              self.point = numpy.array((x, y))
              self.w = w_type.get(w)
              self.c_type = [
                  numpy.array((1, 0)),
                  numpy.array((0, -1)),
                  numpy.array((-1, 0)),
                  numpy.array((0, 1)),
              ]
              self.P = 1
              self.t = (self.x,self.y)
          def command(self, c):
              if c == 'R':
                  self.w = (self.w + self.P) & 3
              elif c == 'L':
                  self.w = (self.w - self.P) & 3
              elif c == 'M':
                  self.point += (self.c_type[self.w] * self.P)
              elif c == 'P':
                  self.P *= -1
              elif c == 'T':
                  self.t=(self.x,self,y)
          def l_command(self, lc):
              for c in lc:
                  self.command(c)
      if __name__ == "__main__":
          tan = Tan(11, 39, 'W')
          tan.l_command('MTMPRPMTMLMRPRMTPLMMTLMRRMPTMMMMTP')
          print(tan.t)

通过每个题都让我学到了一种思维,很不错,有些问题我们需要更多的去思索,查找最优方式,这样才能锻炼我们的大脑,一起加油。

点赞
收藏
评论区
推荐文章
卡尔 卡尔
4年前
JS 手撕-经典面试题
引言首先出这篇文章,一方面是为了记录巩固我所学的知识,明白面试的高频考点。不鼓励大家背题的,初衷是希望总结的一些面试题能帮助你查漏补缺,温故知新。这些题并不是全部,如果你还想看得更多,可以访问,目前已经有552道大厂真题了,涵盖各类前端的真题,欢迎加入我们一起来讨论~函数call语法:fn.call(obj,...args)功
如何搞定力扣刷题?
好买网(www.goodmai.com)IT技术交易平台前言大家好,我是bigsai,好久不见!今天就给各位小伙伴分享我自己刷题力扣的一些小方法,不一定很有用但是可以参考,祝你更高效的变强!最近在一些群聊、私聊中遇到很多的一个问题就是:刷题,大家也都重视到算法刷题对冲击大厂的重要性,越来越多的人开始卷起来了!BA321C5AFE6864CE60465A0E7
Aidan075 Aidan075
4年前
表弟的数学题,我竟然用了python才解出来
↑关注置顶 有趣的不像个技术号大家好,我是朱小五本来这个周末过得开开心心,结果为了解一道数学题薅掉了一把头发、、、整整18根!而且还是一道小学数学题!!!到底是什么题呢?大家看看吧既然表弟都求到我这了,那就随便的做一做嘛。这不就是一道逻辑题嘛!先假如丁错,则甲乙丙对,此时最小的abc(2^3)\(3^2)\750
Stella981 Stella981
4年前
Github最强算法刷题笔记.pdf
资料一昨晚逛GitHub,无意中看到一位大佬(https://github.com/halfrost)的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙伴没有看到。关于算法刷题的困惑和疑问也经常听朋友们提及。这份笔记里面共包含作者刷LeetCode算法题后整理的数百道题,每道题均附有详细题
Wesley13 Wesley13
4年前
AI面试刷题版
(1)代码题(leetcode类型),主要考察数据结构和基础算法,以及代码基本功虽然这部分跟机器学习,深度学习关系不大,但也是面试的重中之重。基本每家公司的面试都问了大量的算法题和代码题,即使是商汤、face这样的深度学习公司,考察这部分的时间也占到了我很多轮面试的60%甚至70%以上。我去face面试的时候,面试官是residualnet,s
Stella981 Stella981
4年前
Python实现循环随机抽题
前几天有个同学问了我一个问题:现在班上共计有70名学生,题库中有20道题,每位同学随机抽5道题(不重复),该怎么用python实现这个功能?感兴趣的同学可以先不看下面的分析,试着自己实现一下这个功能。已经实现的同学或觉得有点问题的小伙伴,看看我的分析思路吧。1解题思路
Stella981 Stella981
4年前
2021金三银四想进字节大厂必看:LeetCode算法收割机+算法刷题宝典
最近有看到很多朋友想进大厂,四面竟然都考了算法,很多同学面对算法的问题都很头大,因为自己做项目很难用到,但是但凡高薪的职位面试都会问到。最近我整理了一份刷题宝典,这份刷题宝典,也让我进了心仪的大厂。今天给大家分享一下:!(https://static001.geekbang.org/infoq/07/074b4c3d563eca9e7f73a
Wesley13 Wesley13
4年前
LeetCode刷题实战61:旋转链表
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选!今天和大家聊的问题叫做旋转链表,我们先来看题面:https://leetcodecn.com/problems/rotatelist/Give
Stella981 Stella981
4年前
CoreJava逻辑思维
CoreJava逻辑思维顺时针打印自定义矩阵这两天回顾了一下刚入Java时的一些比较有意思的逻辑题,曾经也费劲脑汁的思考过的一些问题,比如百钱百鸡最简单的算法啦之类的,而今天博主想说的是一个循环打印指定字符的一道问题。上题目。从控制台输入两个数字代表矩阵的行列数,并顺时针回旋打印
Stella981 Stella981
4年前
2014年百度阿里前端面试(一面)
先说下百度:百度的笔试题目是相对较简单的,都是些基本知识例如html里面的空元素,块级元素,行内元素,第二题是link和@import引入css的区别,第三个是一个函数输出的题,也很简单,往后的几个是提升网站性能,还有一个域名劫持,最后一个是一个编程题让把一个数按照1000,000,000这样的状态输出,总之都不是很难;百度被称为是炮灰的坟墓,进入面试的人很
可莉 可莉
4年前
2014年百度阿里前端面试(一面)
先说下百度:百度的笔试题目是相对较简单的,都是些基本知识例如html里面的空元素,块级元素,行内元素,第二题是link和@import引入css的区别,第三个是一个函数输出的题,也很简单,往后的几个是提升网站性能,还有一个域名劫持,最后一个是一个编程题让把一个数按照1000,000,000这样的状态输出,总之都不是很难;百度被称为是炮灰的坟墓,进入面试的人很