算法-技巧-简单-只出现一次的数字、多数元素

 记录一下算法题的学习10

只出现一次的数字

leetcode题目:给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间

技巧  位运算 异或运算 Java中异或运算符^  异或运算性质三种

  • 任何数和0做异或运算,结果仍然是原来的数,即 a⊕0=a。
  • 任何数和其自身做异或运算,结果是 0,即 a⊕a=0。
  • 异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。

代码展示

class Solution {public int singleNumber(int[] nums) {int sole=0;//遍历整个数组里的元素,由于题目所给条件除了某个元素只出现一次以外,其余每个元素均出现两次//合理使用异或运算的特点//我们最终获得的就是只出现一次的元素for(int num=0;num<nums.length;num++){ sole^=nums[num];}return sole;}
}

 多数元素

leetcode题目:给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。

1.摩尔投票法  核心理念为 票数正负抵消

  • 候选人(candidates)初始化为 nums[0],票数 count 初始化为 1。
  • 当遇到与candidates 相同的数,则票数 count = count + 1,否则票数 count = count - 1。
  • 当票数 count 为 0 时,更换候选人,并将票数 count 重置为 1。
  • 遍历完数组后,candidates 即为最终答案
class Solution {public int majorityElement(int[] nums) {int candidates= nums[0], count = 1;for (int i = 1; i < nums.length; ++i) {if (candidates == nums[i])count+=1;else if ( --count == 0) {candidates = nums[i];count = 1;}}return candidates;}
}

2.数组排序法  将数组 nums 排序,数组中点的元素 一定为众数。代码展示

class Solution {public int majorityElement(int[] nums) {//数组升序Arrays.sort(nums);int most_number=0; //初始化多数元素--》众数为0most_number=nums[nums.length/2]; //将数组 nums 排序,数组中点的元素 一定为众数。return most_number;}
}
class Solution {public int majorityElement(int[] nums) {//数组降序 jdk8使用Integer[] integers = Arrays.stream(nums).boxed().toArray(Integer[]::new);Arrays.sort(integers ,Collections.reverseOrder ());int most_number=0; //初始化多数元素--》众数为0most_number=integers[integers.length/2]; //将数组 nums 排序,数组中点的元素 一定为众数。return most_number;}
}

 注意

  •  如果想要使用降序:Arrays.sort(scores,Collections.reverseOrder());。
  • 首先要注意的是不能用int这个类型了,要用Integer,不能使用基本类型(int,double, char)
  • 如果是int型需要改成Integer,float要改成Float

举例Integer[] 和int[] 互转 jdk8使用Stream流来实现互相转化

// int[] --> Integer[]
int[] arr = {1, 2, 3, 4, 5};
Integer[] integers = Arrays.stream(nums).boxed().toArray(Integer[]::new);
// Integer[] --> int[]
int[] nums = Arrays.stream(integers).mapToInt(Integer::valueOf).toArray();

3.哈希表统计法: 遍历数组 nums ,用 HashMap 统计各数字的数量,即可找出众数

方法作用
getOrDefault() 获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
hashmap.getOrDefault(Object key, V defaultValue)
Map.EntryMap声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。
map.entrySet()

java中 键-值 对的集合,Set里面的类型是Map.Entry,一般可以通过map.entrySet()得到。

entrySet实现了Set接口,里面存放的是键值对。一个K对应一个V

class Solution {public int majorityElement(int[] nums) {HashMap<Integer,Integer> map=new HashMap<>();//建立一个哈希表for(int i=0;i<nums.length;i++){map.put(nums[i],map.getOrDefault(nums[i],0)+1);//将nums集合里面的元素添加到哈希表中}int key = 0;int value = 0;//哈希表遍历,找到众数for(Map.Entry<Integer,Integer> entry:map.entrySet()){if(entry.getValue()>value){value = entry.getValue();key = entry.getKey();}}return key;}
}

 结束拜拜!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/166723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「Whale 帷幄」连续入选科技榜单,AGI 冲击波正在加速行业洗牌

以 AGI 为底座&#xff0c;品牌 MarTech 正在经历一场前所未有的深度变革。 近日&#xff0c;弯弓研究院发布「中国 MarTech 500 强榜单」&#xff0c;以 2023 中国营销技术&#xff08;MarTech&#xff09;生态为研究对象&#xff0c;洞察行业现象与未来趋势。作为品牌数字化…

AMEYA360:蔡司新能源汽车解决方案驱动产业未来

电动化正在重塑中国汽车工业。自中国汽车工业开始发展以来&#xff0c;在电动化和智能化的浪潮推动下&#xff0c;汽车行业从未面临着如此巨大的变革。得益于中国汽车产业尤其是新能源车过去十余年的激流勇进&#xff0c;消费者对新能源汽车的接受度也在发生转变。新能源汽车市…

2016年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

Section IUse of English Directions: Read the following text.Choose the best word(s) for each numbered blank and mark A&#xff0c;B,Cor D on the ANSWER SHEET.(10 points)   Happy people work differently.They’re more productive&#xff0c;more creative&am…

前后端性能优化实践(含Java代码部分、数据库部分、React前端部分)

最近的一个大屏报表统计的接口查询速度很慢&#xff0c;耗时近一分钟左右&#xff0c;数据量级只是700万左右&#xff0c;但很慢&#xff0c;最后优化到4秒左右&#xff0c;客户还能接受&#xff0c;但其实还可以在优化&#xff0c;先这样吧&#xff0c;简单记录下。这次主要优…

App Inventor 2 文本转数字

App Inventor 2 是弱语言类型&#xff0c;文本和数字之间不用刻意去转换&#xff0c;之间赋值就可以了。文本赋值给数字变量如下&#xff1a; 运行结果&#xff1a;124 注意&#xff1a;数字变量初始化的时候要给一个数字的初始值&#xff0c;表明它是数字。 如果文本中含有非…

java与c++中的分支语句switch的不同

java中的switch后可用字符串,而C只能用字符和数字 switch(suffix){case "js":contentType"text/javascript";break;case "css":contentType"text/css";break;}c switch (x){case 0:case 1:case 2:rth 3;break;case 3:case 4:case 5:r…

系列三、事务

一、事务 1.1、概述 事务是数据库操作的基本单元&#xff0c;它是指逻辑上的一组操作&#xff0c;要么都成功&#xff0c;要么都失败。典型场景&#xff1a;转账&#xff0c;例如Jack给Rose转账1000元&#xff0c;转账成功&#xff1a;Jack账户的余额少1000元&#xff0c;Rose…

关于进制的转化

二进制转十进制&#xff1a; &#x1f530; 方法一&#xff1a;二进制转十进制&#xff0c;用各数的码位与位权的乘积之和&#xff0c;说白了就是用从右到左的每个数去乘以2的幂次方&#xff08;最右边是0&#xff09;&#xff0c;然后就所有的数相加。 补充&#xff1a;位权是…

<蓝桥杯软件赛>零基础备赛20周--第7周--栈和二叉树

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…

VMware共享文件夹不能放mysql的数据

概要 使用VMware搭建了一个虚拟机&#xff0c;准备做数据库服务器。服务器是linux系统&#xff0c;安装了mysql和redis。为了数据安全&#xff0c;准备将mysql的数据文件放到共享文件夹中&#xff0c;尝试多次后都没成功。问题可能是共享文件夹中的文件的拥有者都是root&#…

MFC所有控件介绍及基本使用

一、前言 本篇文档介绍了MFC控件的基本使用&#xff0c;同时提供了关于MFC控件使用的工程代码&#xff0c;程序界面如下图&#xff0c;有兴趣的可以到文档最后的链接处进行下载。 二、控件介绍 2.1 Button &#xff08;按钮&#xff09; 2.2 CheckBox&#xff08;复选框&am…

【jvm】虚拟机之堆

目录 一、堆的核心概述二、堆的内存细分&#xff08;按分代收集理论设计&#xff09;2.1 java7及以前2.2 java8及以后 三、堆内存大小3.1 说明3.2 参数设置3.3 默认大小3.4 手动设置3.5 jps3.6 jstat3.7 OutOfMemory举例 四、年轻代与老年代4.1 说明 五、对象分配过程5.1 说明5…

电脑键盘推荐

一、键盘分类 &#xff08;1&#xff09;键位个数 目前有75&#xff0c;84&#xff0c;87&#xff0c;98&#xff0c;104&#xff0c;108的。 &#xff08;2&#xff09;薄膜键盘和机械键盘 薄膜键盘就是大多数办公室常见的键盘&#xff0c;主要打一个便宜&#xff0c;耐造…

Python武器库开发-前端篇之Html基础语法(二十九)

前端篇之Html基础语法(二十九) HTML 元素 HTML元素指的是HTML文档中的标签和内容。标签用于定义元素的类型&#xff0c;而内容则是元素所包含的内容。HTML元素由开始标签和结束标签组成&#xff0c;也可以是自闭合标签。 例如&#xff0c;下面是一个叫做<p>的HTML元素…

Android开发从0开始(服务)

Android后台运行的解决方案&#xff0c;不需要交互&#xff0c;长期运行。 服务基础框架&#xff1a; public class MyService extends Service { public MyService() { } Override public IBinder onBind(Intent intent) { //activity与service交互&#xff08;需要继…

全网最全图解Kafka适用场景

消息系统 消息系统被用于各种场景&#xff0c;如解耦数据生产者&#xff0c;缓存未处理的消息。Kafka 可作为传统的消息系统的替代者&#xff0c;与传统消息系统相比&#xff0c;kafka有更好的吞吐量、更好的可用性&#xff0c;这有利于处理大规模的消息。 根据经验&#xff…

淘宝、1688代购系统;微信代购小程序,代购系统源代码,PHP前端源码演示

电商价格数据监测接口、品牌商品控价接口、商品数据分析接口和比价搜索API接口都是非常实用的电商接口服务&#xff0c;下面我将为您详细介绍这些接口的用途和使用方式。 1.电商价格数据监测接口&#xff08;注册获取请求调用key&#xff09; taobao.item_get-获得淘宝商品详…

ubuntu环境删除qtcreator方法

文章目录 方法1方法2方法3参考不同的安装方法,对应不同的删除方法 方法1 apt-get或者dpkg 方法2 QtCreatorUninstaller 方法3 MaintenanceTool

2023亚太杯数学建模C题思路分析 - 我国新能源电动汽车的发展趋势

1 赛题 问题C 我国新能源电动汽车的发展趋势 新能源汽车是指以先进技术原理、新技术、新结构的非常规汽车燃料为动力来源( 非常规汽车燃料指汽油、柴油以外的燃料&#xff09;&#xff0c;将先进技术进行汽车动力控制和驱动相结 合的汽车。新能源汽车主要包括四种类型&#x…

js中forEach、filter、map的区别

forEach、filter、map都可以遍历数组&#xff0c;那么三者有什么区别&#xff1f; 区别&#xff1a; forEach遍历数组全部元素&#xff0c;利用回调函数对数组进行操作&#xff0c;不会返回新的数组,return只用于控制循环是否跳出当前循环; filter返回一个新的数组&#xff0…