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
        }
    }
    
  • 相关阅读:
    iOS URL中汉字的编码和解码
    指针函数和函数指针
    面试题1:赋值运算符函数
    线程安全的单实例模式
    大数相加
    网格走法
    stringstream字符串流的妙用
    判断一棵二叉树是否为二叉排序树
    idea 从javadoc中复制内容出来
    idea开启jquery提示及如何找到学习目标
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13532499.html
Copyright © 2011-2022 走看看