算法题:int 数组中 只有一个是id 只出现一次 其他都出现2次 怎么找出只出现一次的id
首先讲一个最笨的算法:时间复杂度为N 空间复杂度为N
代码如下:输出结果id=3完全正确;
int[] a = new int[] { 1, 1, 2, 2, 3, 4, 4 };
Dictionary<int, int> dic = new Dictionary<int, int>() { };
for (int i = 0; i < a.Length; i++)
{
if(dic.Keys.Contains(a[i]))
{
dic[a[i]]++;
}
else
{
dic.Add(a[i], 1);
}
}
int id=dic.FirstOrDefault(s => s.Value == 1).Key;
再来一种时间复杂度为N 空间复杂度为1的。
List<int> arr = new List<int> { 1, 1, 2, 2, 3, 4, 4 };
List<int> arrnew = new List<int>();
for (int i = 0; i < arr.Count; i++)
{
if(arrnew.Contains(arr[i]))
{
arrnew.Remove(arr[i]);
}
else
{
arrnew.Add(arr[i]);
}
}
id = arrnew[0];
再来个最佳算法:异或来做。(0异或任何数都为本身,相等的数异或为0,异或支持结合律)
int[] arr = new int[] {1,1,2,2,3,4,4 };
var m=0;
for(int i=0;i<arr.Length;i++)
{
m = m ^ arr[i];
}
m=3;
完美解决问题
算法题:int 数组中 只有一个是id 只出现一次 其他都出现2次 怎么找出只出现一次的id的更多相关文章
- [经典算法题]寻找数组中第K大的数的方法总结
[经典算法题]寻找数组中第K大的数的方法总结 责任编辑:admin 日期:2012-11-26 字体:[大 中 小] 打印复制链接我要评论 今天看算法分析是,看到一个这样的问题,就是在一堆数据 ...
- 136 Single Number 数组中除一个数外其他数都出现两次,找出只出现一次的数
给定一个整数数组,除了某个元素外其余元素均出现两次.请找出这个只出现一次的元素.备注:你的算法应该是一个线性时间复杂度. 你可以不用额外空间来实现它吗? 详见:https://leetcode.com ...
- LeetCode 136 Single Number 数组中除一个数外其他数都出现两次,找出只出现一次的数
Given an array of integers, every element appears twice except for one. Find that single one. class ...
- Single Number 数组中除了某个元素出现一次,其他都出现两次,找出这个元素
Given an array of integers, every element appears twice except for one. Find that single one. Note:Y ...
- 黑马基础阶段测试题:定义一个int类型的数组,数组中元素为{5,7,3,9,4}。求出数组中的最小值,并判断最小值是否为偶数,如果是偶数则输出“最小值为偶数”,如果不是偶数则输出“最小值为奇数”。打印如下:
package com.swift; import java.util.Arrays; public class ArrayTest { public static void main(String[ ...
- 剑指offer35题:第一个只出现一次的字符+剑指offer55题:字符流中第一个不重复的字符+剑指offer51题:数组中重复的数字
在看剑指offer的时候,感觉这三个题目很像,都是用哈希表可以解决,所以把这三个题整理出来,以供复习. 剑指offer35题:第一个只出现一次的字符 题目描述:在字符串中找出第一个只出现一次的字符.如 ...
- Java实现 蓝桥杯 算法训练 寻找数组中最大值
算法训练 寻找数组中最大值 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述 对于给定整数数组a[],寻找其中最大值,并返回下标. 输入格式 整数数组a[],数组元素个数小于1等于10 ...
- 【C语言】在两个数成对出现的数组中找到一个单独的数。
//在两个数成对出现的数组中找到一个单独的数.比如{1,2,3.3,1,4.2},即找出4 #include <stdio.h> int find(int arr[], int len) ...
- 《剑指offer》第五十六题(数组中唯一只出现一次的数字)
// 面试题56(二):数组中唯一只出现一次的数字 // 题目:在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次.请 // 找出那个吃出现一次的数字. #include <iostr ...
随机推荐
- Failed to start component [StandardEngine [Catalina].StandardHost[localhost].StandardContext[/项目名]]
问题: 最近几天在做一个小项目,今天中午本来想启动tomcat打开看看项目的,没想到项目突然无法打开,页面总是显示404 tomcat报错如下:Failed to start component [S ...
- websocket-heartbeat-js心跳检测库正式发布
前言: 两年前写了一篇websocket心跳的博客——初探和实现websocket心跳重连. 阅读量一直比较大,加上最近考虑写一个自己的npm包,因此就完成了一个websocket心跳的检测库.在这 ...
- centos+git+gitolite 安装和部署
一.部署环境 系统:CentOS 6.4x64 最小化安装 IP:192.168.52.131 git默认使用SSH协议,在服务器上基本上不用怎么配置就能直接使用.但是如果面向团队服务,需要控制权限的 ...
- select应用
服务端源码 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @author: zengchunyun "& ...
- js的一些
// 1 定时器参数问题 无限个参数 /*setTimeout(function(num1,num2,num3,num4){ alert(num1+num2+num3+num4) },1000,1,2 ...
- ECMA Script 6_ 类 class
类 class ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板. 通过 class 关键字,可以定义类 class 新的 class 写法只是让对象原型的写法更加 ...
- mysql having和where的区别
having子句与where子句一样,都是用于条件判断的. 区别1 where是判断数据从磁盘读入内存的时候 having是判断分组统计之前的所有条件 区别原理 区别2 having子句中可以使用字段 ...
- XAMPP 安装时 MySQL 无法启动,且提示端口占用。
今天安装XAMPP时遇到了几个坑,忙活了一上午才搞定,写下来分享给同样遇坑的盆友们. MySQL 点击start 提示端口3306被占用,我改了端口号,又改了注册表,将注册表地址改为xampp中mys ...
- 2019年年初iOS招人心得笔记(附面试题)
第一部分是我当时准备的面试题 第二部分是我的心得 我重点在本文的第二部分说一下这次面试别人的心得体会.而关于第一部分的面试题,文中不提供答案(因为不是本文的重点) 第一部分:面试题 注意,下面这些题只 ...
- RocketMQ生产消费模型选择
一. 生产者,根据某个标识将消息放到同一个队列中 在发送消息时,使用SelectMessageQueueByHash,该类根据传入进去的arg,进行hash计算,将消息分配到相应的队列中. publi ...