137. Single Number II

Given a non-empty array of integers, every element appears three times except for one, which appears exactly once. Find that single one.

Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

Example 1:

Input: [2,2,3,2]
Output: 3

Example 2:

Input: [0,1,0,1,0,1,99]
Output: 99

题意:数组中只有一个数出现了一次,其他数都出现了三次,找到这个只出现一次的数。

分析:类似题目之前也写过,例如:【剑指Offer】数组中只出现一次的数字

下面给出讨论区里一个精简的代码。首先要知道在这类题目中对于每个二进制位的运算都是相同的,所以可以对任意一个二进制位进行运算;其次,对于某一特定二进制位,ones表示1出现的次数,twos表示1出现了两次。

就样例1[2,2,3,2]来讨论。

nums[0]nums[1]nums[2]nums[3]onestwos
2(10)   2(10)0
 2(10)  02(10)
  3(11) 1(01)0
   2(10)3(11)0

上面的流程中的括号表示整数对应的二进制表示。补充一下:&~twos 与 &~ones表示出现三次的二进制位置为0

因此最后twos=0,结果最终为ones。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ones=0,twos=0;
        for(auto x: nums){
            ones = (ones^x) & ~twos;
            twos = (twos^x) & ~ones;
        }
        return ones;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sure, here are some common OOP features and principles: Features: 1. Encapsulation: Encapsulation is the process of hiding the implementation details of an object from the outside world, and restricting access to the object's internal data and methods. 2. Abstraction: Abstraction is the process of creating a simplified version of something complex, in order to make it more manageable and easier to understand. 3. Inheritance: Inheritance is the mechanism by which one class inherits properties and methods from another class. 4. Polymorphism: Polymorphism is the ability of an object to take on many different forms, depending on the context in which it is used. Principles: 1. Single Responsibility Principle: The Single Responsibility Principle (SRP) states that a class should have only one reason to change. This means that a class should only be responsible for one thing, and should not be responsible for multiple unrelated tasks. 2. Open/Closed Principle: The Open/Closed Principle (OCP) states that a class should be open for extension but closed for modification. This means that you should be able to add new functionality to a class without modifying its existing code. 3. Liskov Substitution Principle: The Liskov Substitution Principle (LSP) states that a subclass should be able to be substituted for its parent class without affecting the correctness of the program. This means that a subclass should be able to use all the methods and properties of its parent class without any issues. 4. Interface Segregation Principle: The Interface Segregation Principle (ISP) states that a class should not be forced to implement interfaces it does not use. This means that you should only include the methods and properties that are necessary for a class to perform its specific tasks in its interface. 5. Dependency Inversion Principle: The Dependency Inversion Principle (DIP) states that high-level modules should not depend on low-level modules, but both should depend on abstractions. This means that you should use interfaces or abstract classes to decouple the high-level and low-level classes, making your code more flexible and easy to maintain.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值