算法练习一(Python篇)

算法练习一(Python篇)

只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例1:

输入: [2,2,1]
输出: 1

示例2:

输入: [4,1,2,1,2]
输出: 4

解题思路:
主题为只出现一次,只需要关注这个一次,在python中存在位运算符,本题容易想到使用异或进行解决,即:

  • a^a=0;自己和自己异或等于0
  • a^0=a;任何数字和0异或还等于他自己
  • abc=acb;异或运算具有交换律

通过异或运算,将相同部分的元素一一化为0,剩下的最后一个元素便是只出现过一次的元素。

代码:

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        init = 0
        for i in nums:
            init ^= i
        return init

多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例1:

输入:[3,2,3]
输出:3

示例2:

输入:[2,2,1,1,1,2,2]
输出:2

解题思路:
由于题目提及到数组总是存在多数元素,则将数组排序后它必存在中间位置,只需要返回其索引值指向的值即可
代码:

class Solution(object):
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        return nums[len(nums)//2]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值