题目

  给定一个整型数组arr和一个大于1的整数k,已知arr中只有一个数出现了一次,其他的数都出现了k次,请返回只出现1次的数。要求时间复杂度O(N),空间复杂度O(1)。

基本思路

  首先看一个七进制数无进位相加的问题。 
  七进制数a:     6 4 3 2 6 0 1 
  七进制数b:     3 4 5 0 1 1 1 
  无进制相加的结果:  2 1 1 2 0 1 2

  可以看出,a和b无进位相加,在i位置上的结果就是 (a[i] + b[i]) % 7。同理,k进制的两个数相加,i位置上的值为 (a[i] + b[i]) % k。那么,如果k个相同的k进制数相加,相加的结果一定是每一位上都为0。

  知道上述过程,解这道题就很容易了。首先将数组中每一个数都转换成k进制数,如果一个元素出现了k次,那么k次相加以后一定为0。所以,设置一个变量e,初始化为0,将所有元素相加完后,e的值就是只出现一次的数的k进制形式,再将其转换成10进制数就可以了。

public int onceNum(int[] arr,int k){int[] e = new int[32];for(int i=0;i!=arr.length;i++){setExclusiveOr(e,arr[i],k);}int res = getNumFromKSysNum(e,k);return res;
}public void setExclusiveOr(int[] e,int value,int k){int[] curKSysNum = getKSysNumFromNum(value,k);for(int i=0;i!=e.length;i++){e[i] = (e[i] + curKSysNum[i]) %k;}public int[] getKSysNumFromNum(int value,int k){int[] res = new int[32];int index = 0;while(value!=0){res[index++] = value %k;value = value/k;}return res;
}public int getNumFromKSysNum(int[] e,int k){int res = 0;for(int i = e.length-1;i!=-1;i--){res = res*k + e[i];}return res;}

在其他数都出现k次的数组中找到只出现一次的数相关推荐

  1. 《程序员代码面试指南》第七章 位运算 在其他数都出现k 次的数组中找到只出现一次的数...

    题目 在其他数都出现k 次的数组中找到只出现一次的数 java 代码 package com.lizhouwei.chapter7;/*** @Description: 在其他数都出现k 次的数组中找 ...

  2. 在其他数都出现偶数次的数组中找到出现奇数次的数

    题目 给定一个数组arr,其中只有一个数出现了奇数次,其他数都出现了偶数次,打印这个数. 进阶问题 有两个数出现了奇数次,其他数出现了偶数次,打印这两个数. 要求 时间复杂度O(N),空间复杂度(1) ...

  3. 在数组中找到第 k 小的数

    在数组中找到第 k 小的数 [要求] 如果 arr 长度为 N,要求时间复杂度为 O(N),额外空间复杂度为 O(1). public static int[] getMinKNumByHeap(in ...

  4. java数组中最小的k个元素_java – 在数组中找到k个最小整数

    这是我的代码,它适用于查找1-7个最小整数,但是8和9.当我在数组中找到8个最小整数时,它返回null.任何人都可以帮我解决问题吗?我在这里使用quicksort. 非常感谢! 更新:我已经找到问题, ...

  5. Python 轻松解决从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合。(对比用库和不用库的方法)

    文章目录 一.问题说明 二.解决方法 一.问题说明 问题来源:粉丝的提问 从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合(对比用库和不用库的方法) 二.解决方法 iter ...

  6. 第k大的数python代码_Python实现查找数组中任意第k大的数字算法示例

    本文实例讲述了Python实现查找数组中任意第k大的数字算法.分享给大家供大家参考,具体如下: 模仿partion方法,当high=low小于k的时候,在后半部分搜索,当high=low大于k的时候, ...

  7. c++求区间第k大数_数组中求第K大数的实现方法

    问题:有一个大小为n的数组A[0,1,2,-,n-1],求其中第k大的数. 该问题是一个经典的问题,在<算法导论>中被作为单独的一节提出,而且其解决方法很好的利用了分治的思想,将时间复杂度 ...

  8. LeetCode 2176. 统计数组中相等且可以被整除的数对

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 k ,请你返回满足 0 <= i < j < n ,nums[i] ...

  9. 2176. 统计数组中相等且可以被整除的数对

    给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 k ,请你返回满足 0 <= i < j < n ,nums[i] == nums[j] 且 (i * j) 能 ...

最新文章

  1. 宏基因组分析软件2综述、metaSPAdes、IDBA-UD、MetaQuast、Prokka、metaProdigal
  2. python 图片 转 pdf
  3. sql 一对多获得一条数据_从真实销售数据获得insights——SQL部分
  4. 使用Python,将字符串的首字母变为大写,其余都变为小写
  5. 初次安装Magento商城 后台报错的解决方案
  6. 汇编语言基础 debug的使用
  7. Oracle-Oracle SQL Report (awrsqrpt.sql/awrsqrpi.sql)生成指定SQL的统计报表
  8. Mono源码学习笔记:Console类(四)
  9. php 3des 兼容java,PHP版3DES加解密类,可与java的3DES(DESede)加密方式兼容
  10. aws lambda使用_使用AWS Lambdas扩展技术堆栈
  11. JqueryUI 引领Java开发新方式:专注UI,快速开发!(JqueryUI+jeecg结合, 升华的开发模式)
  12. 力扣190.颠倒二进制数
  13. python中的命名空间指什么_python中命名空间
  14. 理解Android编译命令
  15. 直线算法(Bresenham)
  16. Java设计模式-单例模式实际应用场景
  17. Java课程中实际项目案例分析
  18. python爬虫-斗鱼弹幕(asyncore仅供学习参考用)
  19. 微信小程序下拉刷新功能--onPullDownRefresh
  20. 电脑时间不准怎么办?电脑时间不准怎么修复?

热门文章

  1. Mongodb 定时备份和恢复
  2. HT for Web 3D游戏设计设计--汉诺塔(Towers of Hanoi)
  3. 字符编码笔记:ASCII,Unicode和UTF-8(转载)
  4. 设置Eclipse、MyEclipse默认workspace路径
  5. 802.11协议中帧控制域中To DS and From DS 比特位的含义
  6. python中的矩阵运算
  7. 标准模板库之容器-《C++标准库(第二版)》读书笔记
  8. c++编译器pointer to a function used in arithmetic的解决办法
  9. intent和intentfilter
  10. c++基础知识——算数运算符