• leetcode刷题笔记一百三十六题与一百三十七题 只出现一次的数字与只出现一次的数字II


    leetcode刷题笔记一百三十六题与一百三十七题 只出现一次的数字与只出现一次的数字II

    源地址:

    136. 只出现一次的数字

    137. 只出现一次的数字 II

    问题描述:

    136题问题描述

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

    说明:

    你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

    示例 1:

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

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

    137题问题描述

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

    说明:

    你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

    示例 1:

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

    输入: [0,1,0,1,0,1,99]
    输出: 99

    //136题与137题区别在于 136题的重复元素只重复两次, 137题的重复元素会重复三次
    //这造成的影响在于本题的主要解法基于位运算中的异或,只是用单个变量进行异或,很难区别三次重复与单次重复,需要引入第二个变量
    
    //136题
    object Solution {
        def singleNumber(nums: Array[Int]): Int = {
            var single = 0
            for (num <- nums) single ^= num
            return single
        }
    }
    
    //137题
    //重复K次,依次类推,需要引入K个变量
    object Solution {
        def singleNumber(nums: Array[Int]): Int = {
            var once = 0
            var twice = 0
            
            for (num <- nums){
                once = ~twice & (once^num)
                twice = ~once & (twice^num)
            }
            return once
        }
    }
    
  • 相关阅读:
    常用正则表达式
    C语言的指针与二维数组
    【原创】datalist实现简单分页功能
    【原创】datalist的页脚访问和控制
    [原创]手动删除顽固病毒总结
    [zz]复杂指针解析
    极度郁闷的一次电脑维修经历
    武汉城市地铁规划图
    [转]objc_msgSend 的 ARM 汇编分析
    [转]Cydia and XCode Local App Testing
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13532499.html
Copyright © 2020-2023  润新知