LeetCode精华75题(持续更新)

LeetCode刷题笔记

数组/字符串

交替合并字符串

  • 题目:

    给你两个字符串 word1word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。

    返回 合并后的字符串

  • 题解:

    • C:

      可以利用双指针交替移动获取字符然后存入到结果字符串中,注意结束条件,当其中一个指针到达字符串尾端时,直接将另一字符串的剩余部分加入到结果串中。

      char * mergeAlternately(char * word1, char * word2){// 直接调用strlen函数获取字符串长度int len=strlen(word1)+strlen(word2);// 申请空间,预留结束符的空间char *ans=malloc(len+1);char *p1 = word1;char *p2 = word2;int i=0;while(i<len){ ans[i]=*(p1++);i++;// 注意:字符串的结束符是'\0' 而不是"\0"if(*p1=='\0') // p1到达串1尾端,直接将串2剩余部分加到结果串,结束循环{strcpy(ans+i,p2);break;}ans[i]=*(p2++);i++;  if(*p2=='\0'){strcpy(ans+i,p1);break;}     }ans[len]='\0';	// 添加结束符,防止越界return ans;
      }
      
    • C++:

      可以利用C++的库函数尾插push_back()

      class Solution {
      public:string mergeAlternately(string word1, string word2) {int m = word1.size();int n = word2.size();string res;res.reserve(m+n);int i=0,j=0;while(i<m||j<n) // 只要有一个字符串没有到达尾端就继续循环{if(i<m)res.push_back(word1[i++]); // 尾插if(j<n)res.push_back(word2[j++]);}return res; // string类型字符串不需要添加结束符}
      };
      

字符串中的最大公因子

  • 题目:

    对于字符串 st,只有在 s = t + t + t + ... + t + tt 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。

    给定两个字符串 str1str2 。返回 最长字符串 x,要求满足 x 能除尽 str1x 能除尽 str2

  • 题解:

    • C:

      首先要明白最大公因子,意味着这个子串既是str1的子串又是str2的子串,更相减损法求最大公因子,递归

      char* gcdOfStrings(char* str1, char* str2) {// 求出长串和短串char* lgr = strlen(str1) > strlen(str2) ? str1 : str2;char* shr = strlen(str1) > strlen(str2) ? str2 : str1;if(strcmp(lgr,shr) == 0){return str1; // 两串相等公因子就是本身}if(strncmp(lgr,shr,strlen(shr)) != 0){return "";  // 没有公因子}return gcdOfStrings(lgr + strlen(shr), shr); // 有公因子但是两串不相等,指针向后移动递归
      }
      
    • C++:

      如果 str1str2 拼接后等于 str2str1 拼接起来的字符串,那么一定存在符合条件的字符串 X。并且X的长度是str1str2长度的最大公约数

      class Solution {
      public:string gcdOfStrings(string str1, string str2) {return(str1+str2==str2+str1 ? str1.substr(0,(gcd(str1.size(), str2.size()))) : "");// gcd() 是c++库函数,求最大公约数// 在C++的std::string类中,length()和size()两个函数在功能上是完全相同的。}
      };
      

拥有最多糖果的孩子

  • 题目:

    给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。

    对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。

  • 题解:

    • C:

      先获取最大值,然后再将每一项加上额外的数然后和最大值比对。bool类型是C99的新特性,赋值的时候注意不是字符串。

      bool* kidsWithCandies(int* candies, int candiesSize, int extraCandies,int* returnSize) {bool* ret = (bool*)malloc(sizeof(bool) * candiesSize); // 申请堆区空间,栈区空间在函数调用后会释放*returnSize = candiesSize;int max = -1;// 找出当前最大值for (int i = 0; i < candiesSize; i++) {max = candies[i] >= max ? candies[i] : max;}// 判断加上extra是否大于最大值for (int i = 0; i < candiesSize; i++) {ret[i] = candies[i] + extraCandies >= max ? true : false;// 由于新bool类型,也可以如下写法// ret[i] = candies[i] + extraCandies >= max;}return ret;
      }
      
    • C++:

      利用vector容器来操作数据会更加方便,std::max_element 是 C++ 标准库 <algorithm> 头文件中定义的一个算法,用于在一个序列中查找最大元素。这个函数返回指向序列中最大元素的迭代器,而不是返回实际的最大值。如果序列为空,它将返回指向序列末尾的迭代器。

      class Solution {
      public:vector<bool> kidsWithCandies(vector<int>& candies, int extraCandies) {vector<bool> res;int max=*max_element(candies.begin(), candies.end());vector<int>::iterator it_int = candies.begin();for (; it_int != candies.end(); it_int++) {res.push_back((*it_int) + extraCandies >= max );}return res;}
      };
      

种花问题

  • 题目:

    假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。

    给你一个整数数组 flowerbed 表示花坛,由若干 01 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false

  • 题解:

    • C:

      贪心算法:在每一步选择中都采取当前状态下最好或最优的选择,从而希望导致结果是全局最好或最优的算法。能种花先种花种完之后再看是否还有剩余,可以通过新建数组再首尾添0来简化判断。

      bool canPlaceFlowers(int* flowerbed, int flowerbedSize, int n) {// 新建数组的容量比原本数组容量加2int new[flowerbedSize + 2];// 拷贝,然后首位置零for (int i = 1, j = 0; j < flowerbedSize; i++, j++) {new[i] = flowerbed[j];}new[0] = 0;new[flowerbedSize + 1] = 0;// 如果前一位和后一位都为0的情况即可种花for (int i = 1; i < flowerbedSize + 1; i++) {if (new[i - 1] == 0 && new[i + 1] == 0 && new[i] != 1) {new[i] = 1;n--;}}// 直接返回bool值return n <= 0;
      }
      
    • C++:

      使用跳格子法,因为题目给的数组不存在相邻为1的情况,所以若当前为1直接跳两格,为0且到达末尾或者下一格为0可以栽花,为0但下一格为1需要跳三格。

      class Solution {
      public:bool canPlaceFlowers(vector<int>& flowerbed, int n) {int i = 0;// 不适用迭代器,会访问越界while (i < flowerbed.size()) {if (flowerbed[i] == 1) {i += 2;} else {if (i == flowerbed.size() - 1 || flowerbed[i + 1] == 0) {// if ( flowerbed[i + 1] == 0 ||i == flowerbed.size() - 1) 是错误的,会发生下表越界,利用逻辑短路的特性避免n--;i += 2;} else {i += 3;}}}return n <= 0;}
      };
      

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

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

相关文章

【iOS】UI学习(一)

UI学习&#xff08;一&#xff09; UILabelUIButtonUIButton事件 UIViewUIView对象的隐藏UIView的层级关系 UIWindowUIViewController定时器与视图对象 UISwitch UILabel UILabel是一种可以显示在屏幕上&#xff0c;显示文字的一种UI。 下面使用代码来演示UILabel的功能&#…

AI学习指南数学工具篇-Python中的凸优化库

AI学习指南数学工具篇-Python中的凸优化库 在人工智能和机器学习领域&#xff0c;凸优化是一个非常重要的数学工具。它可以帮助我们解决各种问题&#xff0c;包括线性规划、二次规划、半定规划等。而在Python中&#xff0c;有一个非常优秀的凸优化库&#xff0c;即CVXPY。本文…

做好开源快速开发平台研发创新 助力行业高效发展!

随着信息化时代的到来&#xff0c;科技的力量无处不在。为了提高办公效率&#xff0c;很多大中型企业倾向于使用更为先进的软件平台来助力企业降本增效。在众多助力神器之中&#xff0c;开源快速开发平台低代码技术平台深得广大新老客户朋友的喜爱&#xff0c;它与生俱来的优势…

结合PyTest和Selenium进行网页自动化测试的例子

一个结合PyTest和Selenium进行网页自动化测试的示例。 这个测试用例模拟了一个简单的用户登录过程&#xff0c;并包含了对登录后页面状态的断言。我们将使用Selenium的WebDriver来控制浏览器&#xff0c;并使用PyTest来进行断言。 import pytest from selenium import webdri…

vue2+echarts地图下钻+地图遮盖物散点

一、下载工具 npm i echarts echarts-gl axios -S -S是生产依赖默认是-S不写也可以 -D是开发依赖 二、引入工具 import * as echarts from "echarts"; import "echarts-gl"; import axios from "axios"; 三、HTML部分代码 <div class&…

微信小程序路由跳转

1. wx.navigateTo 作用&#xff1a;保留当前页面&#xff0c;跳转到应用内的某个页面。特点&#xff1a;跳转后目标页面的生命周期函数 onLoad 和 onShow 会被触发。使用场景&#xff1a;一般用于跳转到应用内的其他页面&#xff0c;保留当前页面的状态&#xff0c;例如从文章…

Java数据类型

一、每种数据都定义了 明确的数据类型&#xff0c;在内存中分配了不同大小的 内存空间(字节)。 二、Java数据类型分为两种&#xff1a; 基本数据类型&#xff1a; 数值型&#xff1a; 整数类型&#xff0c;存放整数(byte[1] , short[2] , int[4] , long[8]) 浮点类型&#xff0…

UE5 读取本地图片并转换为base64字符串

调试网址&#xff1a;在线图像转Base64 - 码工具 (matools.com) 注意要加&#xff08;data:image/png;base64,&#xff09; FString UBasicFuncLib::LoadImageToBase64(const FString& ImagePath) {TArray<uint8> ImageData;// Step 1: 读取图片文件到字节数组if (!…

【蓝桥杯】第十四届蓝桥杯大赛软件赛国赛C/C++ 大学 B 组

答题结果页 - 蓝桥云课 (lanqiao.cn) 0子2023 - 蓝桥云课 (lanqiao.cn)&#xff08;暴力枚举 #include<bits/stdc.h> using lllong long; using ullunsigned long long; #define fir first #define sec second //#define int llconst int N1e510; const int mod1e97;int…

C++标准模板(STL)- C 内存管理库 - 分配内存 (std::malloc)

C 内存管理库 分配内存 std::malloc 定义于头文件 <cstdlib> void* malloc( std::size_t size ); 分配 size 字节的未初始化存储。 若分配成功&#xff0c;则返回指向分配的适合对任何标量类型对齐的内存块中&#xff0c;最低&#xff08;首&#xff09;字节的指针…

HT46R002 贴片 SOP8 经济型AD型OTP MCU单片机芯片

HT46R002在智能家居中的具体应用案例可以包括以下几个方面&#xff1a; 1. 智能照明控制&#xff1a;可以用于控制LED灯的亮度和色温&#xff0c;甚至可以通过手机APP远程控制开关和调节灯光效果。 2. 环境监测&#xff1a;用于监测室内温度、湿度、空气质量等&#xff0c;当检…

PostgreSQL和GaussDB对比

PostgreSQL和GaussDB对比 GaussDB 是华为推出的一款基于 PostgreSQL 的企业级数据库产品&#xff0c;通过对 PostgreSQL 进行一系列优化和扩展&#xff0c;使其更加适应企业应用的需求。以下是 PostgreSQL 和 GaussDB 两者之间的对比&#xff0c;从多个方面进行分析&#xff0…

httpJVM

目录 HTTPS如何保证安全 1&#xff09;引入非对称加密 2&#xff09;引入非对称加密 3.中间人攻击 4.解决中间人攻击 JVM 1.JVM内存划分 2.JVM类加载过程 八股内容 3.JVM中的垃圾回收机制 释放垃圾的策略 1.标记-清除 2.复制算法 3.标记-整理 分代回收 HTTPS如何…

GB-T 43696-2024 网络安全技术 零信任参考体系架构

GB-T 43696-2024 网络安全技术 零信任参考体系架构 编写背景 随着网络环境的日益复杂&#xff0c;传统的网络安全策略已经难以满足现代企业的需求。为了应对不断变化的安全威胁&#xff0c;零信任安全模型应运而生。GB-T 43696-2024《网络安全技术 零信任参考体系架构》是中国…

Android Graphics图形栈SurfaceFlinger之间各种Layer以及对应Buffer之间的关系

Android Graphics图形栈SurfaceFlinger之间各种Layer以及对应Buffer之间的关系 SurfaceFlinger layer之间的对应关系

MyBatis学习笔记(周五前学完)

MyBatis-Plus是一个MyBatis的增强工具。在MyBatis的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 通过MyBatis-Plus来进行数据插入时&#xff0c;它默认会 使用雪花算法来生成id&#xff0c;长度比较长 增删改的返回值都是统一的&#xff0c;影响的只有行数。…

给pdf加水印,python实现

from PyPDF2 import PdfReader, PdfWriterdef add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):"""把水印添加到pdf中"""pdf_output PdfWriter()input_stream open(pdf_file_in, rb)pdf_input PdfReader(input_stream, strictFalse…

基于魔搭开源推理引擎 DashInfer实现CPU服务器大模型推理--理论篇

前言 在人工智能技术飞速发展的今天&#xff0c;如何高效地在CPU上运行大规模的预训练语言模型&#xff08;LLM&#xff09;成为了加速生成式AI应用广泛落地的核心问题。阿里巴巴达摩院模型开源社区ModelScope近期推出了一款名为DashInfer的推理引擎&#xff0c;旨在解决这一挑…

机器学习补充学习

1、Adaboost算法 Adaboost算法是一种集成学习方法&#xff0c;通过结合多个弱学习器来构建一个强大的预测模型。核心思想&#xff1a;如果一个简单的分类器在训练数据上犯错误&#xff0c;那么它在测试数据上也可能犯错误。 Adaboost通过迭代地训练一系列的分类器&#xff0c…

QT-demo:0轴分布图表

版本&#xff1a;5.9 第一种: 使用 PyQt5 和 Matplotlib 库 安装所需的库&#xff1a; pip install PyQt5 matplotlib创建和显示图表&#xff1a; import sys import numpy as np import matplotlib.pyplot as plt from PyQt5.QtWidgets import QApplication, QMainWindow f…