leetcode秋招冲刺 (专题16--18)

news2024/10/6 7:27:41

专题16:分治

题目169:多数元素(YES)

  • 解题思路:使用哈希表可以统计出现次数的性质,直接统计就行。

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

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

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        //使用哈希表显然是最容易的,用哈希表可以计数的功能
        unordered_map<int,int>map;

        for(int i=0;i<nums.size();i++)
        {
            map[nums[i]]++;
            if(map[nums[i]]>(nums.size()/2))
            {
                return nums[i];
            }
        }

        return 0;
    }
};

题目159:库存管理|||(YES)

  • 使用冒泡排序算法

仓库管理员以数组 stock 形式记录商品库存表,其中 stock[i] 表示对应商品库存余量。请返回库存余量最少的 cnt 个商品余量,返回 顺序不限。

class Solution {
public:
    //冒泡排序
    void boblle_sort(vector<int>&stock)
    {
        for(int i=0;i<stock.size()-1;i++)
        {
            for(int j=0;j<stock.size()-i-1;j++)
            {
                if(stock[j]>stock[j+1])
                {
                    int temp=stock[j];
                    stock[j]=stock[j+1];
                    stock[j+1]=temp;
                }
            }
        }
    }
    vector<int> inventoryManagement(vector<int>& stock, int cnt) {

        //排序
        boblle_sort(stock);

        vector<int>ans;

        for(int i=0;i<cnt;i++)
        {
            ans.push_back(stock[i]);
        }

        return ans;
    }
};

题目161:连续天数的最高销售额(NO)

  • 解题思路:就是连续的扫描每次再原来的基础上叠加出最大值

某公司每日销售额记于整数数组 sales,请返回所有 连续 一或多天销售额总和的最大值。

要求实现时间复杂度为 O(n) 的算法。

class Solution {
public:
    int maxSales(vector<int>& sales) {
        int pre = 0, maxAns = sales[0];

        //就是连续的扫描每次再原来的基础上叠加出最大值
        for (const auto &x: sales) {
            pre = max(pre + x, x);
            maxAns = max(maxAns, pre);//记录最大值
        }
        return maxAns;
    }
};

题目158:库存管理||(YES)

  • 解题思路:哈希表

仓库管理员以数组 stock 形式记录商品库存表。stock[i] 表示商品 id,可能存在重复。请返回库存表中数量大于 stock.length / 2 的商品 id。

class Solution {
public:
    int inventoryManagement(vector<int>& stock) {
        //哈希表
        unordered_map<int,int>map;

        for(int i=0;i<stock.size();i++)
        {
            map[stock[i]]++;
            if(map[stock[i]]>(stock.size()/2))
            {
                return stock[i];
            }
        }

        return 0;
    }
};

题目142:训练计划(YES)

  • 解题思路:这题依旧非常熟悉了,使用一个新的head作为新链表,然后循环比较l1和l2就行了。

给定两个以 有序链表 形式记录的训练计划 l1、l2,分别记录了两套核心肌群训练项目编号,请合并这两个训练计划,按训练项目编号 升序 记录于链表并返回。

注意:新链表是通过拼接给定的两个链表的所有节点组成的。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* trainningPlan(ListNode* l1, ListNode* l2) {
        //这题原来做过,需要使用一个head指针代码返回的新的链表头结点
        ListNode*head=new ListNode();
        ListNode*temp=head;

        //开始遍历操作
        while(l1!=nullptr&&l2!=nullptr)
        {
            if(l1->val<=l2->val)
            {
                temp->next=l1;
                l1=l1->next;
                temp=temp->next;
            }else if(l2->val<l1->val)
            {
                temp->next=l2;
                l2=l2->next;
                temp=temp->next;
            }
        }

        if(l1!=nullptr)
        {
            temp->next=l1;
        }else
        {
            temp->next=l2;
        }

        return head->next;

    }
};

专题17:位运算

题目136:只出现一次的数字(YES)

  • 解题思路:哈希表

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        //使用哈希表
        unordered_map<int,int>map;
        for(int i=0;i<nums.size();i++)
        {
            map[nums[i]]++;
        }

        for(int i=0;i<nums.size();i++)
        {
            if(map[nums[i]]==1)
            {
                return nums[i];
            }
        }
        return 0;
    }
};

  • 方法二:使用异或运算,切记异或可以找出出现一次的数字
class Solution {
public:
    int singleNumber(vector<int>& nums) {
        //使用异或运算
        int ans=nums[0];
        for(int i=1;i<nums.size();i++)
        {
            ans^=nums[i];
        }

        return ans;
    }
};

题目191:位1的个数(NO)

  • 使用&与运算和<<左移运算

编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中
设置位
的个数(也被称为汉明重量)。

class Solution {
public:
    int hammingWeight(int n) {
        int ans=0;

        for(int i=0;i<32;i++)
        {
            //这里1<<i就会生成第i位为1的二进制数
            if(n&(1<<i))
            {
                ans++;
            }
        }

        return ans;
    }
};
  • 代码解释

这段代码是一个C++的类Solution,其中包含一个公有方法hammingWeight,用于计算一个32位无符号整数中有多少个位是1(即汉明重量)。该方法的实现如下:

  1. 首先定义了一个整数ret来存储最终的结果(即汉明重量),并初始化为0。
  2. 然后使用一个for循环遍历0到31共32位(32位无符号整数的位数)。
  3. 在循环中,通过将1左移i位(1 << i)来生成一个只有第i位为1的数,然后与输入的n进行按位与运算(n & (1 << i))。
  4. 如果按位与的结果不为0(即第i位为1),则将ret递增1。
  5. 最后返回ret作为结果,即32位无符号整数n中为1的位的个数。

这段代码利用位运算的特性,逐位检查n的每一位是否为1,从而计算出n的汉明重量。

  • 为何1<<i就可生成第i位是1的二进制

在C++中,<< 是左移位运算符,其功能是将一个数的二进制表示向左移动指定的位数。当我们使用 1 << i 时,表示将数字1的二进制表示向左移动i位,其效果是生成一个只有第i位为1的二进制数。

举个例子,当i=0时,1 << 0 就是将二进制数1向左移动0位,结果为1,二进制表示为00000001;当i=1时,1 << 1 就是将二进制数1向左移动1位,结果为2,二进制表示为00000010;依此类推,当i=2时,结果为4,二进制表示为00000100,依此类推。

因此,通过1 << i,我们可以生成一个只有第i位为1的二进制数(其余位为0),用于与原始数字进行按位与运算,以判断原始数字的第i位是否为1。

  • 拓展:打印二进制数的方法
#include <iostream>
#include <bitset> // 需要包含头文件 <bitset> 来使用 bitset 类

void printBinary(int n) {
    std::bitset<32> bs(n); // 使用 bitset 类来表示32位二进制
    std::cout << "Binary representation of " << n << " is: " << bs << std::endl;
}

int main() {
    int num = 10; // 需要打印的整数
    printBinary(num); // 调用打印方法
    return 0;
}

题目268:丢失的数字(YES)

  • 先排序,再遍历查找哪个丢失了。

给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        //先排序
        sort(nums.begin(),nums.end());

        int ans=0;
        for(int i=0;i<nums.size();i++)
        {
            if(ans!=nums[i])
            {
                return ans;
            }
            ans++;
        }
        return ans;
    }
};

题目405:数字转换为十六进制(NO)

  • 解题思路:位运算

给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。

注意:

十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。

  • 官方题解
class Solution {
public:
    string toHex(int num) {
        if (num == 0) {
            return "0";
        }
        string sb;
        for (int i = 7; i >= 0; i --) {
            int val = (num >> (4 * i)) & 0xf;
            if (sb.length() > 0 || val > 0) {
                char digit = val < 10 ? (char) ('0' + val) : (char) ('a' + val - 10);
                sb.push_back(digit);
            }
        }
        return sb;
    }
};

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

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

相关文章

用vue2+elementUI封装手机端选择器picker组件,支持单选、多选、远程搜索多选

单选注意点&#xff1a; touchmove.prevent: 在 touchmove 事件上添加 .prevent 修饰符&#xff0c;以阻止默认的滚动行为。 handleTouchStart: 记录触摸开始的 Y 坐标和当前的 translateY 值。 handleTouchMove: 计算触摸移动的距离&#xff0c;并更新 translateY 值。 han…

「技术分享」FDL对接金蝶云API取数

很多企业的ERP系统都在用金蝶云星空&#xff0c;金蝶云星空API是IT人员获取数据的重要来源&#xff0c; 常常用来生成定制化报表&#xff0c;进行数据分析&#xff0c;或是将金蝶云的数据与OA系统、BI工具集成。 通常情况下&#xff0c;IT人员需要使用Python、Java等语言编写脚…

【机器学习】(基础篇一) —— 什么是机器学习

什么是机器学习 本系列博客为你从机器学习的介绍开始&#xff0c;使用大量的代码实战和验证&#xff0c;最终帮助你完全掌握什么是机器学习 人工智能、机器学习和深度学习的关系 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;&#xff1a;是一门研…

algorithm算法库学习之——不修改序列的操作

algorithm此头文件是算法库的一部分。本篇介绍不修改序列的操作函数。 不修改序列的操作 all_ofany_ofnone_of (C11)(C11)(C11) 检查谓词是否对范围中所有、任一或无元素为 true (函数模板) for_each 应用函数到范围中的元素 (函数模板) for_each_n (C17) 应用一个函数对象到序…

上位机图像处理和嵌入式模块部署(mcu项目1:假设用51单片机实现)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 到目前位置&#xff0c;我们借助于qt和apm32 mcu芯片&#xff0c;实现了大多数功能。大家如果回过头来看&#xff0c;其实这些功能并不复杂。从固件…

Java(七)——多态

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

Arcgis Api 三维聚合支持最新版API

Arcgis Api 三维聚合支持最新版API 最近有同学问我Arcgis api 三维聚合&#xff0c;官方还不支持三维聚合API&#xff0c;二维可以。所以依旧是通过GraphicLayers 类来实现&#xff0c;可支持最新Arcgis Api版本 效果图&#xff1a;

【APK】SDKManager运行后闪退

本地JDK已安装&#xff0c;且配置了环境变量&#xff0c;未安装 android studiio 问题描述&#xff1a;右键以管理员身份运行 SDKManager&#xff0c;终端窗口闪退 问题原因&#xff1a;未找到正确的Java路径 解决办法&#xff1a; 1.修改tools目录下的 android.bat 文件&am…

0301STM32GPIO外设输出

STM32GPIO外设输出 STM32内部的GPIO外设GPIO简介基本结构GPIO位结构输入部分&#xff1a;输出部分&#xff1a; GPIO八种工作模式浮空/上拉/下拉输入模拟输入开漏/推挽输出复用开漏/推挽输出 手册寄存器描述GPIO功能描述外设的GPIO配置GPIO寄存器描述端口输入数据寄存器端口输出…

Kafka第四篇——生产数据总体概括,源码解析分区策略,数据收集器,Sender发送线程,key值

目录 流程图以及总体概述 拦截器 分区器以及分区计算策略 为啥进行分区计算&#xff1f; producer生产者怎么知道有哪些分区&#xff1f; 分区计算 如何自定义实现分区器&#xff1f; 想说的在图里啦&#xff01;宝宝&#xff01;&#x1f4a1; ​编辑 如果key值忘记传递了呢&a…

Vue移动端地图App:van-uploader导致的卡顿问题

问题描述 基于Vue3+Vant IU 4开发的移动端地图App,在进行地图点位上报、上报记录查看过程中,出现App卡顿、甚至闪退的问题,进行问题定位之后,发现是van-uploader组件导致的问题。 van-uploader文件上传组件 van-uploader组件用于将本地的图片或文件上传至服务器,并在上传…

园区、社区、乡村的智能管理

智慧园区、社区、乡村管理系统是现代信息技术在城市化进程中的重要应用,它们通过集成多种技术手段,实现对园区、社区、乡村的全面、高效、智能化管理。以下是对这三种管理系统的详细阐述: 一、智慧园区管理系统 1. 定义与目的 智慧园区管理系统是运用物联网、云计算、大数…

Canal架构以及使用规范

Canal架构以及使用规范 一、Canal的作用 相关文档&#xff1a;GitHub - alibaba/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件 MySQL主备复制原理 MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events&#xff0c;可…

【做一道算一道】和为 K 的子数组

给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2 示例 2&#xff1a; 输入&#xff1a;nums [1,2,3],…

分布式整合

一、分布式架构介绍 什么是分布式系统 分布式系统指一个硬件或软件组件分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统。 通俗的理解&#xff0c;分布式系统就是一个业务拆分成多个子业务&#xff0c;分布在不同的服务器节点&#xff0…

【数据结构与算法】快速排序霍尔版

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​

找不到x3daudio1_7.dll怎么修复?一招搞定x3daudio1_7.dll丢失问题

当你的电脑突然弹出提示&#xff0c;“找不到x3daudio1_7.dll”&#xff0c;这时候你就需要警惕了。这往往意味着你的电脑中的程序出现了问题&#xff0c;你可能会发现自己无法打开程序&#xff0c;或者即便打开了程序也无法正常使用。因此&#xff0c;接下来我们要一起学习一下…

【简单介绍下Memcached】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

LabVIEW从测试曲线中提取特征值

在LabVIEW中开发用于从测试曲线中提取特征值的功能时&#xff0c;可以考虑以下几点&#xff1a; 数据采集与处理&#xff1a; 确保你能够有效地采集和处理测试曲线数据。这可能涉及使用DAQ模块或其他数据采集设备来获取曲线数据&#xff0c;并在LabVIEW中进行处理和分析。 特…

Wormhole Filters: Caching Your Hash on Persistent Memory——泛读笔记

EuroSys 2024 Paper 论文阅读笔记整理 问题 近似成员关系查询&#xff08;AMQ&#xff09;数据结构可以高效地近似确定元素是否在集合中&#xff0c;例如Bloom滤波器[10]、cuckoo滤波器[23]、quotient滤波器[8]及其变体。但AMQ数据结构的内存消耗随着数据规模的增长而快速增长…