基于快排 查找数组中出现三次的元素(***)
2015-08-30 22:01
447 查看
题目:
数组中有一个元素出现3次,其余出现两次
找到出现三次的元素,
要求空间复杂度 O(1) // 不要想用Map
时间复杂度不大于O(nlgn)
思路:
快排,count 记录在比较过程中与基准元素相等的个数,如果==3 , 则直接返回
数组中有一个元素出现3次,其余出现两次
找到出现三次的元素,
要求空间复杂度 O(1) // 不要想用Map
时间复杂度不大于O(nlgn)
思路:
快排,count 记录在比较过程中与基准元素相等的个数,如果==3 , 则直接返回
[code]//找到出现三次的数,数组中的元素要么出现两次就是三次 public static int quickSort(int[] arr , int low , int high) { if(low >= high) return -1; int[] count = {1}; int pivot = parition(arr , low , high , count); if(count[0] == 3) { return pivot; } int left = quickSort(arr , low ,pivot - 1); if(left > 0) return left; return quickSort(arr , pivot + 1 , high); } private static int parition(int[] arr, int low, int high, int[] count) { int i = low , j = low + 1; for( ; j <= high ; j++) { if(arr[j] == arr[low]) { count[0]++; swap(arr , i + 1 , j); i++; } if(arr[j] < arr[low]) swap(arr , ++i, j); } swap(arr , i , low); return i; } private static void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; }
相关文章推荐
- response.sendRedirect()与request.getRequestDispatcher().forward()区别
- 软件测试基础_软件缺陷管理学习笔记
- cocos2dx精灵裁剪显示ClippingNode
- Brief introduction to Scala and Breeze for statistical computing
- python一套完整的事务操作
- linux系统常用命令
- html5学习之路_004
- 使用strut2要注意的问题
- 使用了hibernate时候乱码问题
- clojure基础入门(一)
- SpringMVC基础-URL参数和Java对象的映射
- Jsp/Servlet:实现文件上传与下载
- Rikka with Graph-------(BestCoder Round #53 (div.2))
- 感受亚马逊:“抠门”的巨无霸电商如何炼成
- C#中TreeView选中父节点同时选中所有的子节点
- UIday05_zy02: 代理设计模式
- python遍历数据
- hihoCoder挑战赛14 -1223
- S城生活,告别凌晨两点半
- PHP 统计数组元素个数