首页 > 试题广场 > 找出重复的数字
[编程题]找出重复的数字
  • 热度指数:3184 时间限制: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

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)
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)
#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)
/*
思路:直接进行排序,找到那个重复的数字即可
*/
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)
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)
//由题意可以知道  仅有一个数字会出现两次
//对每个数出现的次数进行计数
//当有一个数计数到二时结束,输出这个数即可
#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)
涉及重复数字的可以用异或来做,这个比较特殊,也可以用先整体求和,再减去对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)
试试就知道,万能输出重复字符及重复次数!!!
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)
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)
#include<iostream>
(720)#include<unordered_map>
#include<stdio.h>

using namespace std;

int main(void){
    int num;
    char c;
    unordered_map<int, int> m;
    while (scanf("%d%c", &num, &c) && c != '\n'){
        if (m[num] != 0)
            break;
        else
            m[num]++;
    }
    cout<<num<<endl;
    return 0;
}

发表于 2020-05-10 15:11:55 回复(0)
t = l[0]
for i in l[1:]:
    t = i ^ t
return t
发表于 2020-03-13 11:55:02 回复(0)
import java.io.*;
import java.util.Map;
import java.util.HashMap;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String[] str = bf.readLine().split(" ");
        Map<String,Integer> map = new HashMap<>();
        for(int i = 0;i < str.length;i++){
            if(map.get(str[i]) != null){
                System.out.println(str[i]);
            }else{
                map.put(str[i],1);
            }
        }        
    }
}
发表于 2020-03-05 15:18:53 回复(0)
  • map字符出现次数统计法
    import java.util.*;
    public class Main
    {
      public static void main(String [] args)
      {
          Scanner sc=new Scanner(System.in);
          while(sc.hasNextLine())
          {
              String str=sc.nextLine();
              String [] array=str.split(" ");
              HashMap<String,Integer> map=new HashMap<>();
              for(int i=0;i<array.length;i++)
              {
                  if(map.containsKey(array[i]))//如果数字已经出现过了
                  {
                      int value=map.get(array[i]);//通过键获取值
                      value+=1;
                      map.put(array[i],value);
                  }
                  else//如果数字没有出现过
                  {
                      map.put(array[i],1);
                  }               
              }
              //遍历map集合
              Set<String> set=map.keySet();
              for(String key:set)
              {
                  int value=map.get(key);
                  if(value!=1)//如果出现的次数不是1的话就打印出来
                  {
                      System.out.println(key);
                  }
              }
          }
      }
    }
发表于 2020-02-16 13:01:43 回复(0)