做网站需要交税,我的企业网站怎么seo,做网站简单,河南郑州网站顾问关注我们获取更多计算机考研信息? 今日习题在一个数组 nums 中除一个数字只出现一次之外#xff0c;其他数字都出现了三次。请找出那个只出现一次的数字。示例 1#xff1a;输入#xff1a;nums [3,4,3,3]输出#xff1a;4示例 2#xff1a;输入#xff1a;nums [9,1,… 关注我们获取更多计算机考研信息? 今日习题在一个数组 nums 中除一个数字只出现一次之外其他数字都出现了三次。请找出那个只出现一次的数字。示例 1输入nums [3,4,3,3]输出4示例 2输入nums [9,1,7,9,7,9,7]输出1限制 1 nums.length 10000 1 nums[i] 2^31……⏰ 思考时间……如果你想好答案了请查看解题思路和代码实现▼我们需要一个长度为32的辅助数组存储二进制表示的每一位的和。由于数组的长度是固定的,因此空间效率是O(1)。·代码实现·public class Solution56_2 { public int singleNumber(int[] nums) {//本算法同样适用于数组nums中存在负数的情况 if(nums.length0) return -1;//输入数组长度不符合要求返回-1; int[] bitSum new int[32];//java int类型有32位其中首位为符号位 int res0; for(int num:nums){ int bitMask1;//需要在这里初始化不能和res一起初始化 for(int i31;i0;i--){//bitSum[0]为符号位 //这里同样可以通过num的无符号右移来实现否则带符号右移()左侧会补符号位对于负数会出错。 //但是不推荐这样做最好不要修改原数组nums的数据 if((numbitMask)!0) bitSum[i];//这里判断条件也可以写为(numbitMask)bitMask,而不是1 bitMaskbitMask1;//左移没有无符号、带符号的区别都是在右侧补0 } } for(int i0;i32;i){//这种做法使得本算法同样适用于负数的情况 resres1; resbitSum[i]%3;//这两步顺序不能变否则最后一步会多左移一次 } return res; }}微信关注“字节408考研”免费获取各院校计算机软件考研信息与专业课资料