博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Single Number II
阅读量:4948 次
发布时间:2019-06-11

本文共 1585 字,大约阅读时间需要 5 分钟。

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?

题目解析:数组都是3个3个出现。找出唯一的数字。这个是在2个2个出现的升级版,2个2个直接异或就可以

解题思路:先用快排将数组排序,然后维护一个times和result字段,另其初始为2。假设下一个数跟前一个数相等,则times--,当times为01说明3个已经过去,将times又一次赋值为3,result=nums[i]。依照这样的方式遍历一边就可以,这里的这个小技巧来自剑指offer面试题29。以下上AC代码

public int singleNumber(int[] array) {        // 安全性检查 数组是否符合3*n+1;		float len = array.length;		if(len==1.0)		return array[0];		if ((len - 1) % 3 != 0 || len < 4)			return -1;		quick_sort(array, 0, array.length - 1);		int FindNum = array[0];		int times = 2;		for (int i = 1; i < len; i++) {			if (times == 0) {				// 换下一个数,times置为3又一次開始				FindNum = array[i];				times = 3;			}			if (FindNum == array[i])				times--;		}		return FindNum;    }    // 高速排序	private static void quick_sort(int[] arr, int low, int high) {		// 解决和合并		if (low <= high) {			int mid = partition(arr, low, high);			// 递归			quick_sort(arr, low, mid - 1);			quick_sort(arr, mid + 1, high);		}	}	private static int partition(int[] arr, int low, int high) {		// 分解		int pivot = arr[high];		int i = low - 1;		int temp;		for (int j = low; j < high; j++) {			if (arr[j] < pivot) {				i++;				temp = arr[i];				arr[i] = arr[j];				arr[j] = temp;			}		}		// 交换中间元素和privot		temp = arr[i + 1];		arr[i + 1] = arr[high];		arr[high] = temp;		return i + 1;	}
思路二:因为2个2个使用异或,即不进位的2进制加法。这里我们能够定义一个不进位的3进制加法也可解决
posted on
2017-05-18 10:49 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/mthoutai/p/6872206.html

你可能感兴趣的文章
C++ primer plus
查看>>
python mysqlDB
查看>>
UVALive 3942 Remember the Word Tire+DP
查看>>
从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~目录...
查看>>
被需求搞的一塌糊涂,怎么办?
查看>>
c_数据结构_队的实现
查看>>
jquery 选择器总结
查看>>
Qt设置背景图片
查看>>
【阿里云文档】常用文档整理
查看>>
java中的Volatile关键字
查看>>
前端自定义图标
查看>>
实验二
查看>>
独立开发一个云(PaaS)的核心要素, Go, Go, Go!!!
查看>>
网站文章如何能自动判定是抄袭?一种算法和实践架构剖析
查看>>
【OpenCV学习】滚动条
查看>>
ofo用科技引领行业进入4.0时代 用户粘性连续8个月远甩摩拜
查看>>
兰州青年志愿者“中西合璧”玩快闪 温暖旅客回家路
查看>>
计划10年建10万廉价屋 新西兰政府:比想象中难
查看>>
甘肃发首版《3D打印职业教育教材》:校企合作育专才
查看>>
为找好心人抚养孩子 浙江一离婚父亲将幼童丢弃公园
查看>>