【Java】利用代码找出不在预定数组中的自然数
2017-05-22 10:57
302 查看
有这么一个有趣的问题,问:
有这么一个不重复的自然数数组,自然数长度为N,而数组长度为N-2,依次随机把自然数放进数组中,请找出2个没有被放进去的自然数。
例如:这个自然数数组是[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]这十个数,某次随机放入的顺序是[2, 1, 3, 5, 7, 9, 0, 4],那么6和8这两个数没有被放入进来。
有两个思路可以解决这个问题
桶排序的思路是:假设键值的范围是从0到N-1,我们需要标记为0,1,2...N-1的桶。如果元素的键值是i,那么就将该元素放入桶i中。每个桶中的都存在和键值具有相同值的元素。
这道题目有10个自然数需要10个桶,遍历这个数组,数组值为桶的下标,并且将值加1。最后查看桶号,哪号桶为空(值为0)则为没有放进的自然数。
Set具有无序不重复的属性,当然如果你想排下序,可以用TreeSet。思路就是把8个元素一次放进set,然后再向已经存在的这个长度为8的set添加元素,元素值就是0-9之间的这十个数字,如果set中已经存在值,则size()长度不会被改变,否则size()加1.如果长度改变,则打印出当前添加的数字。
有这么一个不重复的自然数数组,自然数长度为N,而数组长度为N-2,依次随机把自然数放进数组中,请找出2个没有被放进去的自然数。
例如:这个自然数数组是[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]这十个数,某次随机放入的顺序是[2, 1, 3, 5, 7, 9, 0, 4],那么6和8这两个数没有被放入进来。
有两个思路可以解决这个问题
桶排序解决
桶排序的思路是:假设键值的范围是从0到N-1,我们需要标记为0,1,2...N-1的桶。如果元素的键值是i,那么就将该元素放入桶i中。每个桶中的都存在和键值具有相同值的元素。这道题目有10个自然数需要10个桶,遍历这个数组,数组值为桶的下标,并且将值加1。最后查看桶号,哪号桶为空(值为0)则为没有放进的自然数。
public class Ziranshu { public static void main(String[] args) { int[] a = {2, 1, 3, 5, 7, 9, 0, 4}; int[] tong = new int[10]; for(int i = 0; i < a.length; i++) { tong[a[i]] = 1; } for(int i = 0; i < tong.length; i++) { if(tong[i] == 0) { System.out.println(i); } } } }
利用Set不重复属性解决
Set具有无序不重复的属性,当然如果你想排下序,可以用TreeSet。思路就是把8个元素一次放进set,然后再向已经存在的这个长度为8的set添加元素,元素值就是0-9之间的这十个数字,如果set中已经存在值,则size()长度不会被改变,否则size()加1.如果长度改变,则打印出当前添加的数字。import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.TreeSet; public class Ziranshu1 { public static void main(String[] args) { int[] a = {2, 1, 3, 5, 7, 9, 0, 4}; Set<Integer> numbers = new TreeSet<Integer>(); for(int i = 0; i < a.length; i++) { numbers.add(a[i]); } int length = numbers.size(); for(int i = 0; i < 10; i++) { numbers.add(i); if(length != numbers.size()) { length = numbers.size(); System.out.println(i + "不在内"); } } } }
相关文章推荐
- 找出不在预定数组中的自然数
- 找出不在预定数组中的自然数
- 找出不在预定数组中的自然数
- Java面试题:1-100之间的数,被放在数组a[99]中,有一个数没有包含在其中,用java代码找出这个数
- Java面试题:1-100之间的数,被放在数组a[99]中,有一个数没有包含在其中,用java代码找出这个数
- Java面试题:1-100之间的数,被放在数组a[99]中,有一个数没有包含在其中,用java代码找出这个数
- JAVA经典面试题(三)--1~100共一百个自然数,放入一个99个元素的数组a[99],找出没有放入的那个元素
- JAVA代码—算法基础:找出整形数组中只出现过1次的两个元素
- 在1--100的自然数中有99个在一个数组中,怎样找出不在数组中的数
- Java面试题:1-100之间的数,被放在数组a[99]中,有一个数没有包含在其中,用java代码找出这个数
- Java面试题:1-100之间的数,被放在数组a[99]中,有一个数没有包含在其中,用java代码找出这个数
- java数组随机乱序且乱序后不在其原来的位置上(代码片段)
- 给定一个数组,找出不在数组中的最小的那个数字
- 利用链表实现队列的Java代码
- 利用链表实现队列的Java代码
- 给定一个数组,找出不在数组中的最小的那个数字
- 1.1至100一百个自然数(无序),放入一个99个元素的数组a[99],用java语言编写一段程序,找出没有被放入数组这个数。【转】
- C++中利用模板求数组长度的代码
- 利用javax.tools动态编译执行java代码
- 利用BTrace跟踪java代码