• Single Number II


    题目:Given an array of integers, every element appears three times except for one. Find that single one.

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

    思路:

    非常好的题目,设一个三十二维的数组,把nums数组的每一个数字按照位大小从前到后计算在当前位的出现1的次数。


    如图所示,最后可以发现如果不是三的倍数,则可以求解出来,见代码,到这边就容易理解了。

    代码:

    class Solution {
    public:
    //第二种解法:位操作法
        int singleNumber(vector<int>& nums) {
            int count[32]={0};
            int result=0;
            for(int i=0;i<32;i++){
                for(int j=0;j<nums.size();j++){
                    if(nums[j]>>i&1){
                        //它是一位一位的操作,当i=3的时候,count[j]<<3,右移3位,使得能够计算第三位的总出现数。当然最终判断是否是3的倍数
                        count[i]++;
                    }
                }
                result |= (count[i]%3)<<i;//一开始卡在这里,没能够想到 如果一个数单独出现1次,那么一定是每一位都不是3的倍数,所以
                //count[i]%3<<i才有意义
            }
            return result;
        }
    };


  • 相关阅读:
    SpringMVC运行原理浅析
    JavaEE就业学习路线(给初学者以及自学者一个学习方向)
    Java 教程
    EL表达式
    Java 教程 (Java 对象和类)
    Java 教程(开发环境配置+基础语法)
    简介几种负载均衡原理
    Linux常用命令大全
    Java 数据结构
    Java 包(package)
  • 原文地址:https://www.cnblogs.com/jsrgfjz/p/8519840.html
Copyright © 2020-2023  润新知