leetcode169多数元素
题目描述给定一个大小为 n 的数组 nums,找出其中出现次数超过 ⌊ n/2 ⌋ 的元素。 你可以假设数组总是存在多数元素。 示例 示例 1: 输入: nums = [3,2,3]输出: 3 示例 2: 输入: nums = [2,2,1,1,1,2,2]输出: 2 进阶要求 你能在时间复杂度 O(n)、空间复杂度 O(1) 的条件下完成算法吗? 解法 1:哈希表(map 计数)思路 我们可以使用哈希表(unordered_map)统计每个元素出现的次数,然后找到出现次数超过 ⌊ n/2 ⌋ 的元素。 代码 #include <iostream>#include <vector>#include <unordered_map>using namespace std;class Solution {public:int majorityElement(vector<int>& nums) { unordered_map<int, int> count; int n =...
LeetCode136只出现一次的数字C++
题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须在线性时间复杂度(O(n))和常数额外空间(O(1))的限制下完成这个问题。 示例 1: 输入: nums = [2,2,1]输出: 1 示例 2: 输入: nums = [4,1,2,1,2]输出: 4 示例 3: 输入: nums = [1]输出: 1 解法题目要求 O(n) 时间复杂度和 O(1) 空间复杂度,我们可以使用 异或(XOR)运算 来解决。 异或运算性质 a ⊕ a = 0(任何数和自己异或结果为 0) a ⊕ 0 = a(任何数和 0 异或不变) a ⊕ b ⊕ c = a ⊕ c ⊕ b(异或运算满足交换律和结合律) 由于数组中除了一个数出现 1 次,其余的数都出现 2 次,那么所有数字进行异或运算后: 成对出现的数会互相抵消变成 0 最终只剩下那个只出现一次的数 C++ 代码class Solution {public: int singleNumber(vector<int>&...
C++重载运算符
[!NOTE]以下内容为Chatgpt生成后整理 1. 基本概念(1)什么是运算符重载?运算符重载(Operator Overloading)允许我们为已有的运算符(如 +、-、*、== 等)定义新的行为,以便这些运算符能够处理我们自定义的类型(如类)。换句话说,运算符重载让运算符能够支持自定义类的对象,使得这些对象在运算符使用时像内置数据类型一样工作。 (2)为什么需要运算符重载?运算符重载能够让我们: 提高代码的可读性和可维护性。 让自定义类的对象可以使用常见的运算符,方便直接参与运算。 例如,考虑两个 Complex 类对象相加,如果没有运算符重载,我们可能需要调用复杂的成员函数来完成加法操作,而运算符重载可以让加法操作变得简洁直观。 C++ 允许重载的大部分运算符 不能重载的运算符: ::(作用域解析符) .*(成员指针访问运算符) .(成员访问运算符) sizeof(求大小) typeid(运行时类型识别) 2. 重载运算符的方式 作为成员函数(operator+、operator==...
C++自定义排序方式
[!NOTE]以下内容为Chatgpt生成后整理 在 C++ 中,自定义比较函数(通常是一个函数或者函数对象)和仿函数(函数对象)都可以用于自定义排序规则或比较方式,但它们的实现方式和使用方法有所不同。 1. 自定义比较函数自定义比较函数是指一个普通的函数,它用于定义如何比较两个对象。通常,这个函数有两个参数,返回值是一个布尔值,表示这两个对象之间的比较结果。 特点: 形式:自定义比较函数通常是一个独立的普通函数。 使用方式:它可以作为参数传递给排序算法(如 std::sort)或数据结构(如 std::priority_queue)等,定义对象的排序或比较规则。 返回类型:一般返回一个 bool 类型,表示是否满足某种条件(例如:a < b,返回 true 表示 a 小于 b)。 示例:#include <iostream>#include <vector>#include <algorithm>using namespace std;// 自定义比较函数bool compare(int a, int b) { ...
C++堆及实现,priority_queue
[!NOTE]以下内容为Chatgpt生成后整理 堆(Heap)是一种特殊的树形数据结构,通常用来实现优先队列、排序算法等功能。堆是一种完全二叉树,它满足特定的顺序性质。我们可以分为最大堆和最小堆两种。 1. 堆的定义堆是一个完全二叉树,其节点满足堆的性质: 最大堆(Max Heap):每个父节点的值大于或等于其子节点的值,即根节点是树中的最大值。 最小堆(Min Heap):每个父节点的值小于或等于其子节点的值,即根节点是树中的最小值。 堆的特点: 完全二叉树:除了最底层外,其他层的节点都是满的,最底层的节点从左到右排列。完全二叉树的结构保证了堆的高效性。 堆的顺序性质:堆中任意节点的值与其子节点的值有顺序关系,最大堆的父节点值大于子节点,而最小堆则相反。 2....
LeetCode二分查找专题
基础知识二分查找是一种在有序数组中查找特定元素的算法,它通过不断将搜索区间减半来快速定位目标元素。对于搜索区间的定义有三种方式,分别是左闭右闭,左闭右开和左开右开。 这三者之间的主要区别在于以下两点(1)每次折半的时候两端的坐标应该移到mid的位置上还是多偏移一个元素(2)while判断结束的条件是 left<right,left<=right,还是left<right-1 left和right的偏移区别 ...
纵横四海EP38《时间贫困》一个人的时间花在哪里,是看得见的
什么是可支配时间与时间贫困可支配时间可支配时间就是花在想做之事上的时间,就是你想干嘛就干嘛的那种时间。 可支配时间和生活满意度之间的关联可支配时间每天<2小时:会陷入时间贫困。 可支配时间每天>5小时:会失去目标感和成就感 两个增加快乐,让我们过得更幸福的启示 我们要至少我们要在一天中找到让我们不限于时间贫困的这个时间,理想的话至少是2小时以上。 下一步要做的是看看这两小时我们应该怎么使用能够让我们更加快乐,这才是重点。 时间贫困是一种主观感觉时间贫困指的其实并不仅仅是可支配时间小于2小时,他指的也是一种感觉。时间贫困是一种主观的判断,是一种我自己内心深处的这种快乐的感觉。假设如果我每天的那可支配时间是2小时,但是这两小时我没有好好的利用的话,其实我的快乐指数也很低。 两种基本形式的动力 积极聚焦 聚焦于积极结果 时间充裕时倾向 对一切的信心都会提升 预防聚焦 聚焦于回避消极结果 时间紧张时倾向 不愿意去探索 如何感觉拥有更多的时间开源从三个因素上让我们自己感觉到时间更加的充裕 自信心 对自己的信心越足,就越觉得自己是时间充裕的。 ...
纵横四海EP42《如何阅读一本书》:阅读的四个层次,你在哪一层?
阅读的四个目的 资讯 资讯主要是用来了解当前发生了什么事的,它是不太涉及到深入的理解或者是长期的影响的。 知识 知识是在资讯积累的基础上进行分析、筛选、理解,总结出规律经验等等。他最后是变成了规律经验、技能。这个是知识,知识才是用来理解世界和解决问题的。 理解力 知识和理解力之间的区别: 第一个区别就是内化了,变成了我自己的知识。 第二个用于实践,就跟举例子有关。你是不是能够举出很多的例子在把这个知识用于实践。 这个知识满足了这两个条件,我们就从知识跃升到了理解力。 娱乐 ...
自习室 STUDYROMM 47 Q&A 卷王的年终问答,书单推荐
在面对海量信息时,如何筛选真正适合自己的内容,并找到自己的节奏和主路线?对于如何高效快速地获取大量信息,并有效利用零碎时间,有什么心得或策略吗? [!NOTE]我们首先要像节食一样给自己制定一个信息饮食计划(information diet...