zoukankan      html  css  js  c++  java
  • 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
        }
    }
    
  • 相关阅读:
    Windows API
    c# 各类型数据库连接字符串格式
    [C#/C++]C#调用非托管DLL的APIs
    (F#) How to enable F# template working under Visual Studio 2010 Shell.
    ubuntu文件、目录操作基本命令
    javascript curry
    C#中组件与控件的主要区别是什么?
    下拉菜单
    js 尺寸和位置 笔记
    $.each
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13532499.html
Copyright © 2011-2022 走看看