面试题3:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

package siweifasan_6_5;
/**
 * @Description:在一个长度为n的数组里的所有数字都在0到n-1的范围内。
 * 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。
 * 请找出数组中任意一个重复的数字。
 *  例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
 * @Parameters:  // Parameters:
    //    numbers:     an array of integers
    //    length:      the length of array numbers
    //    duplication: (Output) the duplicated number in the array number,length
    //  of duplication array is 1,so using duplication[0] = ? in implementation;
    //  Here duplication like pointor in C/C++, duplication[0] equal
    //  *duplication in C/C++
    //    这里要特别注意~返回任意重复的一个,赋值duplication[0]
    // Return value:       true if the input is valid, and there are some duplications in the
    //array number
    // otherwise false
 * @Return:boolean
 */
public class Main04 {
    public static void main(String[] args) {
        Solution05 slt05 = new Solution05();
        int[] numbers={2,3,1,0,2,5,3};
        int length=7;
        int[] duplication=new int[1];
        boolean bool = slt05.duplicate(numbers,  length, duplication);
        System.out.println(bool + " "+ duplication[0]);
    }
}

class Solution05{
    public boolean duplicate(int numbers[],int length,int [] duplication) {

        if(numbers==null || length<=0){
            return false;
        }
        for(int i=0; i<length; i++){
            if(numbers[i]<0 || numbers[i]>=length)
                return false;
        }
        for(int j=0; j<length; j++){
            while(numbers[j]!=j){
                if(numbers[j]==numbers[numbers[j]]){//true说明有重复
                    duplication[0]=numbers[j];
                    return true;
                }
                int temp = numbers[j];
                numbers[j]=numbers[temp];
                numbers[temp]=temp;
            }
        }
        return false;
    }
}
时间: 2024-10-07 12:06:45

面试题3:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。的相关文章

找出矩阵中含有0最多的一行(find the longest row of zero)

对于一个n*n的矩阵,其中只包含有0,1两种元素且,所有的0都在1之前,请找出矩阵中0最多的一行.(Given an N-by-N matrix of 0s and 1s such that in each row no 0 comes before a 1, find the row with the most 0s in O(N) time.) 初看这题,想到的算法就是每一行都设置一个计数器,记录每行的0的个数,然后找出最大值即可(暴力解法). 算法实现: int* find_the_lon

剑指offer(Java版)第一题:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。 *请找出数组中任意一个重复的数字。 *例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。

/*在一个长度为n的数组里的所有数字都在0到n-1的范围内. * 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. * 请找出数组中任意一个重复的数字. * 例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3.*/ import java.util.*; public class Class1 { static class findRepeatedNumber{ public int findRepeatedN

C++数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。(牛客剑指offer)

///////////////////////////////////////////////////////// //数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. //例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}. //由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. #include <iostream> using namespace std; int Grial(int a[],int n) { if(n==0)return -1;

【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}, 由于数组中数字2出现了5次,超过数组的长度的一半,因此输出2 一种办法是先把数组排序,那么超过一半的元素一定是数组最中间的元素. 第二种办法比较抽象,设一个变量保存当前值,设一个次数,当前值与下一个值进行比较,如果相等,次数加一,如果不相等,次数减一,如果次数减到0了还是不相等,就把当前值替换掉.代码如下: #include <stdio.h> #includ

【转】一个数组中有三个数字a、b、c只出现一次,其他数字都出现了两次。请找出三个只出现一次的数字。

转自:http://zhedahht.blog.163.com/ 题目:一个数组中有三个数字a.b.c只出现一次,其他数字都出现了两次.请找出三个只出现一次的数字. 分析:在博客http://zhedahht.blog.163.com/blog/static/2541117420071128950682/中我们讨论了如何在一个数组中找出两个只出现一次的数字.在这道题中,如果我们能够找出一个只出现一次的数字,剩下两个只出现一次的数字就很容易找出来了. 如果我们把数组中所有数字都异或起来,那最终的结

找出字符串中第一个不重复的字符(JavaScript实现)

如题~ 此算法仅供参考,小菜基本不懂高深的算法,只能用最朴实的思想去表达. 1 //找出字符串中第一个不重复的字符 2 // firstUniqueChar("vdctdvc"); --> t 3 function firstUniqueChar(str){ 4 var str = str || "", 5 i = 0, 6 k = "", 7 _char = "", 8 charMap = {}, 9 result =

用LINQ( group by having) 找出Datatable中的重复数据

private void butCF_Click(object sender, RoutedEventArgs e) { if (DatagridDatatable != null && DatagridDatatable.Rows.Count > 0) {//group by 日期,合同号,部门 having count(记录编号)>0 找出 日期 合同号 部门重复的记录 var query = (from t in DatagridDatatable.AsEnumerabl

找出字符串中重复的字母

可以利用字母的大小关系将输入的字符串中的标点符号和空格去掉(利用过滤函数) 利用普通的方法 Python代码如下: 1 #encoding=utf-8 2 #查找给定的字符串中的重复元素 3 4 #用于删除列表中不是字母的元素 5 def delete(alist): 6 for i in alist: 7 if (i>= 'A' and i <= 'Z' or i>= 'a' and i <= 'z'): 8 return True 9 else: 10 return False

数组中一个数字出现的次数超过了数组长度的一半,请找出这个数

算法: 1)初始化,设当前数组为arr[],长度为n,当前元素cur=arr[0],元素出现次数为count: 2)遍历数组,若count==0,设cur=arr[i],count=1;否则,转向3) 3)若arr[i]==cur,则count++,否则,转向4) 4)count--,当i==n-1时,转向5),否则i++,转向2) 5)返回cur; 1 int MoreThanHalf(int *arr,int n) 2 { 3 int cur,count=0; 4 for(int i=0;i