一个列表,找出只出现一次的元素
Posted 全栈测试笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个列表,找出只出现一次的元素相关的知识,希望对你有一定的参考价值。
C语言
1 /*
2 -----------------------------------
3 动态分配需要的内存大小
4 输入数组元素的值
5 通过函数调用,传地址对数组排序
6 循环每个元素,当循环比较某个值时,如果有相等的,计数加1,比较完成后,和cn比较,如果大于cn,那么说明找到,退出循环
7 -----------------------------------
8 */
9
10 # include <stdio.h>
11 # include <malloc.h>
12
13 void findnum(int * arr, int n)
14 {
15 int i, j, count, cn;
16 count = 0;
17 cn = n/2;
18
19 for (i=0; i<n; i++) //双重for循环,统计元素个数
20 {
21 for (j=0; j<n; j++)
22 {
23 if (arr[i] == arr[j])
24 count++;
25 }
26
27 if (count > cn)
28 {
29 printf("超过长度一半的数字是:%d\\n", arr[i]);
30 break;
31 }
32 else if (i==n-1)
33 {
34 printf("无超过长度一半的数字!\\n");
35 break;
36 }
37 count = 0;
38 }
39 return;
40 }
41
42 int main(void)
43 {
44 int len, i;
45 int * pArr;
46 char ch;
47
48 do {
49
50 printf("请输入数字个数:");
51 scanf("%d", &len); //输入元素个数
52 printf("请输入%d个数字(以空格分隔):", len);
53 pArr = (int *)malloc(sizeof(int)*len); //动态分配内存
54 for (i=0; i<len; i++) //输入值
55 scanf("%d", &pArr[i]);
56 printf("动态数组元素为:\\n");
57 for (i=0; i<len; i++) //输出值
58 printf("%d ", pArr[i]);
59 printf("\\n");
60
61 findnum(pArr, len); //调用查找函数
62 free(pArr); //释放动态分配的内存
63
64 printf("\\n你想继续么(Y/N):"); //询问是否继续
65 flushall(); //清除缓存
66 scanf(" %c", &ch);
67 //printf("%c\\n", ch);
68
69
70 }while (\'y\'==ch || \'Y\'==ch); //如果输入的是Y或者y,表示继续
71
72 return 0;
73 }
74
75 /*
76 在Vc++6.0中的输出结果为:
77 -----------------------------------
78
79 请输入数字个数:5
80 请输入5个数字(以空格分隔):1 2 3 4 5
81 动态数组元素为:
82 1 2 3 4 5
83 无超过长度一半的数字!
84 你想继续么(Y/N):y
85 请输入数字个数:5
86 请输入5个数字(以空格分隔):1 1 1 2 3
87 动态数组元素为:
88 1 1 1 2 3
89 超过长度一半的数字是:1
90 你想继续么(Y/N):n
91 Press any key to continue
92
93 -----------------------------------
94 */
Python
li = [1,2,3,4,5,2,2,2,2,2] def findn(li): for i in li: if li.count(i)>len(li)/2: return i n = findn(li) print(n)
java:两种方法
public static void main(String[] args) { int[] nums = {1,2,3,2,2,2,5,4,2}; System.out.println(getFromSort(nums)); System.out.println(getFromMap(nums)); } public static int getFromSort(int[] array){ Arrays.sort(array); System.out.println(Arrays.toString(array)); int mid = array.length/2; int midvalue = array[mid]; int times = 0; for(int i=0;i<array.length;i++){ if (array[i] == midvalue){ times ++; if (times>mid){ return array[i]; } } } return -1; } public static int getFromMap(int[] array){ int mid = array.length/2; Map<String, Integer> map = new HashMap<>(); for(int i=0;i<array.length;i++){ String key = array[i] + ""; if(map.get(key)==null){ map.put(key,1); }else{ map.put(key,map.get(key)+1); } if (map.get(key)>mid){ return Integer.parseInt(key); } } return -1; }
以上是关于一个列表,找出只出现一次的元素的主要内容,如果未能解决你的问题,请参考以下文章
位运算-异或运算-只出现一次的数字-给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素
一个数组中只有两个元素只出现一次,其他元素都出现两次,找出其中只出现一次的元素