首页 > 试题广场 >

找出重复的数字

[编程题]找出重复的数字
  • 热度指数:3727 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
一组无序的自然数集合,由0,1,2... ...,n的数字和一个的数字X(X>=0 && X<=n)组成,请从集合中找出这个重复数字X。

输入描述:
空格分割的自然数集合


输出描述:
重复数字
示例1

输入

9 6 4 2 1 3 5 7 0 1 8

输出

1

说明

0,1,2,3,4,5,6,7,8,9 + 1
示例2

输入

3 0 2 2 1

输出

2

说明

0,1,2,3 + 2
Java解法

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    /**
     * 
     * 运行时间:75ms
     *
     * 占用内存:10684k
     * */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        String[] s1 = s.split(" ");
        Arrays.sort(s1);
        for (int i = 1; i < s1.length; i++) {
            if (s1[i].equals(s1[i - 1])){
                System.out.println(s1[i]);
                break;
            }
        }
    }
}


发表于 2020-03-01 22:17:27 回复(0)
JavaScript(Node) 😎题目:搜狐-重复字符(1.排序比较 2.Set() 3.hash)
const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    ouput: process.stdout
})
let inArr = []
rl.on('line',line=>{
    if(!line) return
    inArr.push(line.trim())
    if(inArr.length === 1){
        let arr  = inArr[0].split(' ').map(e => +e)
        console.log(findRepeat(arr))
        //解法一 排序比较
        // let res = {}
        // for (let i = 0; i < arr.length; i++) {
        //     if(!res[arr[i]]){
        //         res[arr[i]] = 1
        //     }else{
        //         console.log(arr[i])
        //         break
        //     }
        // }
    }
})
//解法二 Set()
function findRepeat(arr) {
    const set = new Set()
    for (let i = 0; i < arr.length; i++) {
        if(set.has(arr[i])) return arr[i]
        set.add(arr[i])
    }
    return 0 
}


发表于 2020-02-26 12:58:34 回复(0)
#include <bits/stdc++.h>
using namespace std;

int main(){
    int n, r;
    bool a[1000000];
    while(cin>>n){
        if(a[n])
            r = n;
        a[n] = true;
    }
    cout<<r<<endl;
    return 0;
}

发表于 2019-10-26 02:09:28 回复(0)
import java.util.HashMap;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        HashMap<Integer,Integer> map = new HashMap<>() ;
        while (sc.hasNext()){
            int n = sc.nextInt();
            if (!map.containsKey(n))
                map.put(n,1);
            else {
                System.out.println(n);
                break;
            }
        }
        sc.close();
    }
}

发表于 2019-10-19 15:41:04 回复(1)
涉及重复数字的可以用异或来做,这个比较特殊,也可以用先整体求和,再减去对N求和
nums = list(map(int,input().split()))
x = 0^1
for i in range(2,len(nums)-1):
    x = x^i
for i in nums:
    x = x^i
print(x)
    

发表于 2019-07-25 12:09:45 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    vector<int>num;
    while(cin>>n)
        num.push_back(n);
    for(int i=0;i<num.size()-1;i++)
    {
        for(int j=i+1;j<num.size();j++)
        {
            if(num[i]==num[j])
            {
                cout<<num[i]<<endl;
                return 0;
            }
        }
    }
    return 0;
}

发表于 2019-08-18 23:11:03 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int comp(const void* a, const void* b) {
  return *((int*) a) - *((int*) b);
}

int main(const int argc, const char** argv) {
  char input[5000];
  gets(input);
  
  int i, nums[1000], numsSize = 0;
  char* tok = strtok(input, " ");
  while (tok) {
    *(nums + numsSize++) = atoi(tok);
    tok = strtok(NULL, " ");
  }
  
  qsort(nums, numsSize, sizeof(int), comp);
  for (i = 0; i < numsSize - 1; ++i)
    if (*(nums + i) == *(nums + i + 1))
      return printf("%d\n", *(nums + i)), 0;
  
  return 0;
}

发表于 2021-07-08 16:25:40 回复(0)
/*
思路:直接进行排序,找到那个重复的数字即可
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] str = br.readLine().split(" ");
        int n = str.length;
        int[] arr = new int[n];
        for(int i = 0;i<n;i++)
            arr[i] = Integer.parseInt(str[i]);
        Arrays.sort(arr);
        int same=arr[0];
        for(int i = 0;i<n-1;i++){
            if(arr[i]==arr[i+1]){
                same = arr[i];
                break;
            }
        }
        System.out.println(same);
        
    }
}

发表于 2020-05-21 15:37:04 回复(0)
//由题意可以知道  仅有一个数字会出现两次
//对每个数出现的次数进行计数
//当有一个数计数到二时结束,输出这个数即可
#include <stdio.h>
int main(){
    int num[1000] = {0};
    int i;
    while(scanf("%d",&i) != EOF){
        num[i]++;
        if(num[i] == 2){
            break;
        }
    }
    printf("%d",i);
    return 0;
}

发表于 2020-02-29 09:53:18 回复(0)
nums = list(map(int,input().split(' ')))
print(sum(nums)-sum(range(len(nums)-1)))
列表是连续的,并且只有一个重复的。所以差值就是重复的那个数咯
发表于 2019-09-16 22:10:35 回复(4)
试试就知道,万能输出重复字符及重复次数!!!
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Iterator;
public class Main{

public static void main(String[] args) throws IOException  {

Scanner s= new Scanner(System.in);
String a= s.nextLine();
String[] b=a.split(" ");
Map<String,Integer> map = new HashMap<String, Integer>();
for(int i =0 ;i<b.length;i++){
if(null!= map.get(b[i])){
map.put(b[i], map.get(b[i])+1); //无序
}
else{
map.put(b[i],1);
}
}

Iterator it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry = (Map.Entry) it.next();
String  key  =  entry.getKey().toString();
int value  =  Integer.parseInt(entry.getValue().toString());
if(value>=2){
System.out.println(key);
//System.out.println("重复的数字(字符)为"+key+"重复的次数"+value);
}

}
}
}

编辑于 2019-07-23 18:54:44 回复(0)
#include <bits/stdc++.h>
usingnamespacestd;
intmain(void){
    inta,n=0;
    charc;
    set<int> s;
    while((cin>>a).get(c)){
        n=s.size();
        s.insert(a);
        if(n==s.size()){
            cout<<a<<endl;
            return0;
        }
        if(c == '\n') break;
    }
    return0;
}

发表于 2019-07-23 10:23:02 回复(0)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{  vector<double> vec1;  double temp;  while (cin >> temp)  {   vec1.push_back(temp);  char c = cin.get();  if (c == '\n')  break;  if (c == ' ')  continue;  }  sort(vec1.begin(), vec1.end());  for (int i = 0; i < vec1.size()-1; i++)  {  if (vec1[i] == vec1[i + 1])  {  cout << vec1[i] << ' ';  for (int temp = vec1[i]; temp == vec1[i]; i++)  {    }  i--;  continue;  }  }  }

编辑于 2019-07-11 21:48:12 回复(1)
#include <iostream>
#include <set>
using namespace std;
int main()
{
    int x;
    set<int> s;
    int len = 0;
    while(cin >>x)
    {
        s.insert(x);
        if(s.size()== len)
        {
            cout << x << endl;
            break;
        }
        len++;
    }
    return 0;
}

发表于 2019-11-02 12:47:43 回复(0)

bitset随便记录一下吧

#include <bits/stdc++.h>

using namespace std;

const int N = 50;

int n, m, k;

bitset<1000001>a;

int main() {
    while (~scanf("%d", &n)) {
        if (a[n] == 1) {
            printf("%d\n", n);
            return 0;
        }
        a[n] = 1;
    }
}
发表于 2019-07-11 15:57:33 回复(1)
package main

import (
    "fmt"
)

func main() {
    var x int
    cnt:=map[int]int{}
    for{
        fmt.Scan(&x)
        cnt[x]++
        if cnt[x]>1{
            fmt.Print(x)
            break
        }
    }
}

发表于 2023-03-20 21:53:19 回复(0)
如果可以重排数组,则把数字i放到第i位,比较i和第i位的值,相等则为重复
发表于 2021-02-24 21:55:43 回复(0)
#include<iostream>
#include<map>
int main()
{
    int n;
    std::map<int,int>m;
    while(std::cin>>n)m[n]+=1;
    for(std::map<int,int>::iterator it=m.begin();it!=m.end();it++)
    {
        if(it->second>1)std::cout<<it->first<<std::endl;
        
    }
    m.clear();
    return 0;
}

发表于 2020-09-11 11:53:57 回复(0)
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {// 笔试专用模块
		// TODO Auto-generated method stub
		Scanner in =new Scanner(System.in);
	    String str=in.nextLine();
	    String ch[]=str.split(" ");
	    for (int i = 0; i < ch.length; i++) {
			for (int j = i+1; j < ch.length; j++) {
				if (ch[i].equals(ch[j])) {
					System.out.println(ch[j]);
					break;
				}
			}
		}
	}
}
双层循环不可以用吗😂
发表于 2020-05-27 15:37:51 回复(0)
print(readline().split(' ').find((value,i,target)=>target.indexOf(value)!==target.lastIndexOf(value)))
js一行了解一下
发表于 2020-05-17 22:22:52 回复(0)