寻找丢失的三个数
2017-09-06 12:54
218 查看
题目描述
现在有一个数组,其值为从1到10000的连续增长的数字。出于某次偶然操作,导致这个数组中丢失了某三个元素,同时顺序被打乱,现在需要你用最快的方法找出丢失的这三个元素,并且将这三个元素根据从小到大重新拼接为一个新数字,计算其除以7的余数。 例:丢失的元素为336,10,8435,得到的新数字为103368435,除以七的余数为2。
解题思路:
1. 先将无序数组进行排序
2. 寻找有序数组中目标元素(注意需要用long类型存储),分以下情况:
测试代码:
现在有一个数组,其值为从1到10000的连续增长的数字。出于某次偶然操作,导致这个数组中丢失了某三个元素,同时顺序被打乱,现在需要你用最快的方法找出丢失的这三个元素,并且将这三个元素根据从小到大重新拼接为一个新数字,计算其除以7的余数。 例:丢失的元素为336,10,8435,得到的新数字为103368435,除以七的余数为2。
解题思路:
1. 先将无序数组进行排序
2. 寻找有序数组中目标元素(注意需要用long类型存储),分以下情况:
1).数组为:1 2 3 * 5 6 * ... 89 90 * ...9998 9999 10000 2).数组为:* * * 4 5 6...9999 10000 3).数组为:1 2 3 4 ... 9995 9996 9997 * * * 4).数组为:1 2 3 * 5 6... 9997 9998 * *
private static Long funtion(int[] nums) { // TODO Auto-generated method stub Arrays.sort(nums);//对数组进行排序 String t = "";//将丢失的数字统一以字符串形式存储 int count = 0; for (int i = 1, j = 0; i <= nums.length + 3 && j < nums.length;) {//相当于两个指针i,j一个用来遍历1~10000数字,一个用来遍历数组元素 if (count == 3)//(情况1、2一定会跳出来) break; if (nums[j] == i) { i++; j++; } else { t += i;//记录下丢失的元素 i++; count++; } } int end = nums[nums.length - 1] + 1; for (int i = count; i < 3; i++) {//如果丢书的数在末尾的处理方法(例如情况3、4) t += end++; } //System.out.println(t); return Long.valueOf(t) % 7; }
测试代码:
public static void main(String[] args) { int nums[] = new int[9997]; // Scanner sc = new Scanner(System.in); for (int i = 1, j = 0; i <= 10000; i++) { switch (i) { case 336: break; case 10: break; case 8435: break; default: nums[j++] = i; break; } } long res = funtion(nums); System.out.println(res); }
相关文章推荐
- 寻找技术人丢失的三种气质
- 丢失的三个元素、网格走法
- 面试题之寻找丢失的数字
- SQL寻找丢失的充值数据,HOHO~
- LeetCode 16. 3Sum Closest--寻找数组中的三个元素和,该和与给定的值的差最小,输出这个和(三个元素可以不连续)
- 寻找在启动WSAD5时丢失的工作区选项
- 2017校招真题编程训练--丢失的三个数 素数对 n个数最小的k个
- 寻找丢失的第一个正整数
- Office Outlook应用 - 寻找丢失的Outlook通讯簿
- [LintCode] Find the Missing Number 寻找丢失的数字
- Office Outlook应用 - 寻找丢失的Outlook通讯簿
- 寻找第一个丢失的正数
- 寻找丢失的数
- 寻找丢失的数
- 算法:寻找丢失的数 I & II
- 寻找丢失的数字(一)
- 寻找丢失的iexplore进程
- 寻找连续数中丢失的数
- 寻找三个有序数组的共同最小元素