剑指Offer-29
来源:互联网 发布:白云学院网络教学平台 编辑:程序博客网 时间:2024/06/14 16:33
题目:
数组中出现次数超过一半的数字。
实现:
public class Solution29 { public static int findMoreThanHalf(int[] nums){ if(nums==null || nums.length<1){ System.out.println("数组为空"); return 0; } int middle = nums.length>>1; int start = 0; int end = nums.length-1; int index = partition(nums,start,end); while (index!=middle){ if(index>middle){ end = index-1; } else { start = index+1; } index = partition(nums,start,end); } int result = nums[middle]; if(check(nums,result)){ return result; } System.out.println("数组中没有出现次数超过一半的数字"); return 0; } public static boolean check(int[] nums,int num){ boolean result = false; int time = 0; for(int i=0;i<nums.length;i++){ if(nums[i]==num){ time++; } } if(time>(nums.length>>1)){ result = true; } return result; } public static int partition(int[] nums,int start,int end){ int pivot = nums[start]; while (start<end){ while (start<end && nums[end]>=pivot){ end--; } nums[start]=nums[end]; while (start<end && nums[start]<=pivot){ start++; } nums[end]=nums[start]; } nums[start] = pivot; return start; } public static void main(String[] args) { // 存在出现次数超过数组长度一半的数字 int numbers[] = {1, 2, 3, 2, 2, 2, 5, 4, 2}; System.out.println(findMoreThanHalf(numbers)); // 出现次数超过数组长度一半的数字都出现在数组的前半部分 int numbers2[] = {2, 2, 2, 2, 2, 1, 3, 4, 5}; System.out.println(findMoreThanHalf(numbers2)); // 出现次数超过数组长度一半的数字都出现在数组的后半部分 int numbers3[] = {1, 3, 4, 5, 2, 2, 2, 2, 2}; System.out.println(findMoreThanHalf(numbers3)); // 只有一个数 int numbers4[] = {1}; System.out.println(findMoreThanHalf(numbers4)); //输入null System.out.println(findMoreThanHalf(null)); // 不存在出现次数超过数组长度一半的数字 int numbers5[] = {1, 2, 3, 2, 4, 2, 5, 2, 3}; System.out.println(findMoreThanHalf(numbers5)); }}
阅读全文
1 0
- 剑指Offer-29
- 剑指offer面试题29
- 剑指OFFER
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 《剑指offer》
- 剑指Offer
- expdp参数+expdpd交互模式中的命令
- dup2测试用例 输出重定向
- 重载overload与覆盖override
- SVN数据代码迁移Windows2012ServerR2
- 02. 路由模式连接 ❀ 深信服上网行为管理
- 剑指Offer-29
- java 资源回收 优化
- java调用C/C++生成的dll动态链接库----借助JNI
- java webService类生成
- aflw数据集使用
- Linux VFS分析(二)
- 网易洗牌
- Jenkins实现Android自动打包
- 【重大更新】DevExpress v17.1新版亮点(WPF篇)