只出现一次的数字

引言:

没有基础也能做算法题。
一题学会,lambda匿名函数,reduce()函数,异或运算。

算法题目:

只出现一次的数字_第1张图片

解答:

以下就是解答,一行代码,能看懂吗?如果看不懂,也没有关系,先看知识点1、2、3,看完后再看这个解答,你会恍然大悟,原来代码这么奇妙

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
# 一行代码搞定
        return reduce(lambda x,y:x^y,nums)

知识点1:Lambda匿名函数

我们先来写一个函数:

1def f(x,y):
2    return x+y

背景:

用标准格式来定义函数,这么写,当然没毛病,但是有时候我们不需要显式地定义函数,直接传入匿名函数会更加的方便。lambda 就是python内置的匿名函数。

语法格式:

lambda  A:B

参数:

A -- 冒号前的A表示参数,多个参数用逗号相隔;

B -- 冒号后的B表示表达式,一个lambda只能有一个表达式;

实例:

>>> f = lambda x,y: x + y

等同于:

def f(x,y):

return x+y

优点:

写法简单,另外因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:

知识点2:x^y  异或运算

描述:

异或运算是加减乘除后比较高级一点点的。功能是相同为0,不同为1,如果和0异或,那么是它本身;

规律:

相同的数异或为0:m^m=0;

不同的数异或为1:m^n=1;

任何数与0异或为任何数:x^0=x;

所以lambda x, y: x ^ y   的结果是一个整数;

实战:

a^b^c^b^a=?

用交换律:上述=(a^a)^(b^b)^c=0^0^c=c

知识点3:reduce函数

描述

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

语法

reduce(function, iterable[, initializer])

参数

function -- 函数,有两个参数

iterable -- 可迭代对象

initializer -- 可选,初始参数实例:

返回值

返回函数计算结果。

实例

from functools import reduce  
# 两数相加  
  def add(x, y) :
      return x + y  
# 计算列表和:1+2+3+4+5 
  sum1 = reduce(add, [1,2,3,4,5])    
# 使用 lambda 匿名函数计算列表中数字之和
  sum2 = reduce(lambda x, y: x+y, [1,2,3,4,5])  
# 打印sum1
  print(sum1)  
# 打印sum2
  print(sum2) 

分享交流:

博主建立了一个测试学习的圈子,如果你也热衷于学习技术、分享知识、互相学习、共同进步,可以添加博主wx:cs55101,带你入圈!

 

你可能感兴趣的:(算法刷题,leetcode,算法,python,软件测试)