Golang每日一练(leetDay0060) 多数元素、两数之和III

news2024/9/27 5:35:29

目录

169. 多数元素 Majority Element  🌟

170. 两数之和 III Two-sum-iii-data-structure-design  🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


169. 多数元素 Majority Element

 给定一个大小为 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入:[3,2,3]
输出:3

示例 2:

输入:[2,2,1,1,1,2,2]
输出:2

进阶:

  • 尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

 代码1: 哈希表

package main

import "fmt"

func majorityElement(nums []int) int {
	count := make(map[int]int)
	n := len(nums)
	for _, x := range nums {
		count[x]++
		if count[x] > n/2 {
			return x
		}
	}
	return -1
}

func main() {
	nums := []int{3, 2, 3}
	fmt.Println(majorityElement(nums))
	nums = []int{2, 2, 1, 1, 1, 2, 2}
	fmt.Println(majorityElement(nums))
}

代码2: 排序

package main

import (
	"fmt"
	"sort"
)

func majorityElement(nums []int) int {
	sort.Ints(nums)
	return nums[len(nums)/2]
}

func main() {
	nums := []int{3, 2, 3}
	fmt.Println(majorityElement(nums))
	nums = []int{2, 2, 1, 1, 1, 2, 2}
	fmt.Println(majorityElement(nums))
}

代码3: 摩尔投票法

维护一个候选元素 candidate 和它出现的次数 count,在遍历数组时,如果当前元素与 candidate 相同,则 count 加 1,否则 count 减 1。如果 count 减为 0,说明前面的元素无法组成多数元素,此时将 candidate 更新为当前元素,并将 count 设为 1。由于多数元素出现的次数大于 ⌊ n/2 ⌋,所以最后 candidate 中存储的一定是多数元素。

package main

import "fmt"

func majorityElement(nums []int) int {
	candidate, count := 0, 0
	for _, x := range nums {
		if count == 0 {
			candidate = x
		}
		if x == candidate {
			count++
		} else {
			count--
		}
	}
	return candidate
}

func main() {
	nums := []int{3, 2, 3}
	fmt.Println(majorityElement(nums))
	nums = []int{2, 2, 1, 1, 1, 2, 2}
	fmt.Println(majorityElement(nums))
}

只有第3种方法满足进阶的复杂度要求。

输出:

3
2


170. 两数之和 III Two-sum-iii-data-structure-design

设计一个接受整数流的数据结构,并检查它是否有一对总和为特定值的整数。

实现 TwoSum 类:

  • TwoSum() 初始化 TwoSum 对象,初始为空数组
  • void add(int number) 将数字添加到数据结构中。
  • boolean find(int value) 如果存在任何一对和等于 value 的数字,则返回 true,否则返回 false

示例:

输入:
["TwoSum", "add", "add", "add", "find", "find"]
[[], [1], [3], [5], [4], [7]]
输出:[null, null, null, null, true, false]
解释:
TwoSum twoSum = new TwoSum();
twoSum.add(1); // [] --> [1]
twoSum.add(3); // [1] --> [1,3]
twoSum.add(5); // [1,3] --> [1,3,5]
twoSum.find(4); // 1 + 3 = 4, 返回 true
twoSum.find(7); // 没有两个整数的和等于 7

约束条件:

  • -10^5 <= number <= 10^5
  • -2^31 <= value <= 2^31 - 1
  • 最多调用 10^4 次 add 和 find

 代码:

package main

import "fmt"

type TwoSum struct {
	cache map[int]int
}

func Constructor() TwoSum {
	return TwoSum{make(map[int]int)}
}

func (this *TwoSum) add(number int) {
	this.cache[number]++
}

func (this *TwoSum) find(value int) bool {
	for num, count := range this.cache {
		complement := value - num
		if complement == num {
			if count >= 2 {
				return true
			}
		} else if _, ok := this.cache[complement]; ok {
			return true
		}
	}
	return false
}

func main() {
	twoSum := Constructor()
	twoSum.add(1)
	twoSum.add(3)
	twoSum.add(5)
	fmt.Println(twoSum.find(4))
	fmt.Println(twoSum.find(7))
}

true
false


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

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

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

相关文章

Zynq实现SDI视频解码PCIE传输 提供工程源码和QT上位机源码加技术支持

目录 1、前言2、我已有的SDI编解码方案3、我已有的PCIE方案4、基于zynq架构的PCIE5、总体设计思路和方案SDI摄像头Gv8601a单端转差GTX解串SDI解码VGA时序恢复YUV转RGB图像缓存PCIE发送通路SDI同步输出通路 6、vivado工程详解7、驱动安装8、QT上位机软件9、上板调试验证SDI同步H…

VMware虚拟机克隆、复制虚拟机

文章目录 为什么要克隆一、环境检查二、开始克隆三、网卡静态配置 为什么要克隆 首先VMware 上创建的虚拟机是可以重复使用的&#xff0c;安装好的虚拟机可以直接复制或者剪切到其它任意电脑上&#xff0c;然后使用 VMware 打开使用&#xff0c;两者的虚拟机设置以及登录密码都…

MySQL笔记(二) 数据库操纵语言DML 、数据库查询语言DQL、数据库控制语言DCL、计算字段、子查询、函数

MySQL笔记&#xff08;二&#xff09; 数据库操纵语言 DML插入数据 INSERT修改数据 UPDATE删除数据 DELETE 数据库查询语言DQL单表查询常用查询条件排序查询分组和分页查询限制结果 分页查询多表查询自身连接查询外连接查询嵌套查询 计算字段字段 field拼接 concatenateTrim()…

10个免费的ChatGPT镜像网站

文章目录 前言说明网站 前言 ChatGPT是一种基于OpenAI GPT&#xff08;Generative Pretrained Transformer&#xff09;模型的聊天机器人&#xff0c;它可以对用户提出的问题做出回答&#xff0c;同时还能够进行精准的语言理解和回复&#xff0c;较好地满足了人们与机器人之间…

MySQL数据库基础表格——增删改查(下)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️树高千尺&#xff0c;落叶归根人生不易&…

媒体邀约服务

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约是什么&#xff1f;专业的媒体邀约服务包含哪些内容&#xff1f;怎么选择合适的媒体邀约服务机构&#xff1f; 今天胡老师就跟大家分享下这方面你的经验。 一&#xff0c;媒体邀…

【C++STL】AVL树

前言 二叉搜索树是具有特殊存储结构的树&#xff0c;任意根节点的左子树的所有节点值都比根节点的值小&#xff0c;右子树的所有节点值都比根节点大。 这种特殊的存储结构使得查找的效率大大提升&#xff0c;为logN。但是还有缺陷。 因为二叉搜索树的构建是一个节点一个节点的…

django 过往后端搭建笔记整理 (2)--rest_framework视图使用

rest_framework视图使用 CreateAPIView---单独执行post上传逻辑views.pyuser_serializers.py CreateAPIView—单独执行post上传逻辑 基本逻辑&#xff1a; ① 准备视图函数类 ② 准备序列化器类 &#xff08;其中可以自定义如何序列化数据、序列化哪些数据&#xff0c;以及如何…

苹果最近删除的照片删除怎么恢复?专业人士都这样恢复照片!

案例&#xff1a;苹果照片删除了怎么恢复&#xff1f; 【友友们&#xff0c;最近不小心清空了手机照片&#xff0c;在最近删除没有看到&#xff0c;有什么方法可以找回来吗&#xff1f;】 随着现代科技的不断发展&#xff0c;手机已经成为人们生活中必不可少的物品&#xff0c…

设计模式 -- 享元模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

以CSDN为例,用Charles抓浏览器接口

0 描述 很多网站&#xff0c;都禁止F12&#xff0c;这就给抓包设置了门槛&#xff0c;虽然解决的方法有很多&#xff0c;今天尝试使用工具试一试&#xff0c;以CSDN热榜为例&#xff0c;直接转python代码 1 工具下载 工欲善其事&#xff0c;必先利其器 这个我就不多说&#x…

MySql -- 为什么使用B+树做索引

再有人问你为什么MySQL用B树做索引&#xff0c;就把这篇文章发给她 本文是参考上述文章进行总结和补充,大家感兴趣也可以阅读原文. 目录 1. 索引 2. 二叉搜索树 3. 平衡二叉树 4. B树 5. B树 6.扩展 -- 聚集索引 VS 非聚集索引 1. 索引 概念:索引是一种特殊的文件&#xff…

工业4.0,无代码改变软件开发格局,数字化转型不再寸步难行

从工业1.0时代到工业4.0时代&#xff0c;我们已经看到了&#xff0c;中国在不断发展的过程中&#xff0c;面临着很多的挑战&#xff0c;企业也面临着很多的困难。在这样的大背景下&#xff0c;传统的开发方式已经不再适用了。很多企业开始寻求一种新的方式来开发软件&#xff0…

【场景削减】基于DBSCAN密度聚类风电-负荷确定性场景缩减方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

1688阿里巴巴中国站图片识别商品API接口、搜图链接、收藏加购接口

API&#xff08;Application Programming Interface&#xff09; 是现代移动应用程序开发和互联网服务有机结合的产物。API的应用使得应用程序之间的通信变得更加轻松、快捷&#xff0c;尤其对于业务复杂而庞大的企业系统&#xff0c;API让开发者能够从中提取必要的功能进行二次…

图表控件Stimulsoft 2023.2 带来极致深色主题, 一起来看看还有哪些亮点?

Stimulsoft Reports 是一款报告编写器&#xff0c;主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署&#xff0c;如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等&#xff0c;在你的应用程序中嵌入报告设计器…

IS215UCVEH2AB有助于在更远距离传输电力的同时实现更好的转换效率。

​ IS215UCVEH2AB有助于在更远距离传输电力的同时实现更好的转换效率。 根据法拉第电磁感应定律&#xff0c;当交变磁场作用于具有磁性的材料时&#xff0c;材料中会感应出电动势。 由于导电材料的磁性&#xff0c;EMF 的电流围绕磁性材料主体旋转。这种旋转电流称为涡流。当导…

相交链表问题

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…

java版spring cloud 企业电子招投标采购系统源码之首页设计

随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及审计监督要…

通过MyBatis(下)

作者&#xff1a;~小明学编程 文章专栏&#xff1a;spring框架 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 对MyBatis进行单元测试 springboot的单元测试 生成单元测试类 MyBatis中的增删查改 增 删 查 改 ${} 和 #{} 的区别 SQL注入 模糊查询…