当前位置: 首页 > news >正文

leecode中的面试100题

isalnum函数用于检查一个字符是否为字母或数字。它的参数是一个int类型

isupper() 是大写

islower() 是小写

toupper() 变成大写

tolower() 变成小写

do while 首先不管怎么 先执行do一次 然后执行完了之后 在判断while如果符合while里面就继续执行do

vector容器中insert怎么使用 

// 在开始位置之前插入单个元素 5  it.insert(it.ebgin(), 5);

//插入五个六  it.insert(it.begin(),5,6);

//在第一个元素之前插入nums中的所有元素 it.isert(it.begin(),nums.begin(),nums.end());

(一)数组 / 字符串

1 合并两个有序数组

在 C++ 中,vector<int> nums3(10);创建了一个名为nums3vector容器,用于存储整数类型数据。括号中的10表示容器的初始大小,如何在往里加入 那就是在10这个大小之后加入!


2 移除元素

方法要学会 2023.9.15那个方法很好

3 删除有序数组中的重复项

4 删除有序数组中的重复项(II)

我首先想的是 利用一个 左 中 右 来实现 就是遍历我们这个数组如果左等于中 中等于右 那我直接删除右  如果不一样 直接 左等于右 中等于右加1  右等于右+2  这个是错的想法  比如 1 2 2 2 你自己看看你这样子对吗 肯定不对 

新想法  给一个left = 0 sum = 1 从1开始遍历我们的数组 如果数组中nums[i] ==nums[i-1]直接sum++,之后判断sum if sum<=2  直接把我们left++ 然后nums[left] = nums[i] if >2 那我们直接不用管 。如果数组中nums[i] !=nums[i-1] sum重新变成 1 left++ nums[left] = nums[i]   最后返回 left+1即可 因为left是下标 我们返回的是大小 所以我们+1 

5 多数元素 

6 轮转数组

问题很简单就是需要把后面多少个元素放到前面来呢? 

  //剩下的也插入进去

      num.insert(num.begin()+k, nums.begin(), nums.end() - k); 注意这里是+k而不是 k+1(因为我们begin代表的是第一个元素) 

7 买卖股票的最佳时机

7 买卖股票的最佳时机II

8跳跃游戏  不用做了 看看得了

这个题目就是从后往前来看的 注意审题 是到达最后一个下标位置,因此最后一个不再考虑范围之内 我们要从倒数第二个开始考虑(倒数第二个下表是.size()-2 不是-1

(二)双指针 

1 验证回文串 

2 判断子序列

3 两数之和||

这里最重要的就是二分查找 如果单纯两个for循环会超时 

我们进行二分查找就是左闭右闭或者左闭右开 基本不写左开右闭。

想想二分查找怎么用

4 乘最多水的容量

这个题目比较好玩,用双指针来做,就是我们一开始固定left = 0,right  = num.size()-1

我们容量取决于 左右中最短的那个,还取决于 右-左 的长度

考虑一个问题 如果 right 是短的那个 如果我们移动的时候仅仅移动 left  那我们容量是肯定减少的 因为right是短的那个 我们又把距离缩短了 那肯定不会有更大的容量呀 所以我们需要移动right;

因此代码就很简单的写出来了

5 三数之和

思路就是循环遍历数组,得到一个数 取负值,在这个元素的后面找两数之和等于他的集合

注意 首先我们要对遍历数组进行去重

   // 跳过重复的i值,避免重复结果

            if (i > 0 && nums[i] == nums[i - 1]) {

                continue;

            }

left right进行去重,去重逻辑很重要!

 while (left < right && nums[left] == nums[left - 1]) {left++;}while (left < right && nums[right] == nums[right + 1]) {  
//有一种可能就是我们right本来就是最大的了这样子就错了!!!!!!!!!!!right--;}}

这段代码应该在  else 里面    这个里面具体原因在代码中已经写出来 

还有要注意的是 我们本身是while 如果没有left<right 的话 那肯定会出错 因为 比如我们第一个while没有 如果left一直++ 那有可能会出现问题就是 越界 超过nums的范围! 

(三)滑动窗口

1长度最小的子数组

采用的滑动窗口来做,for循环 sum不断加我们的nums[i]直到满足 sum>=target 如果满足就进行减 

详情看2024.09.18这个是最简单的想法 我也有自己写但是稍微复杂一点 


http://www.mrgr.cn/news/79677.html

相关文章:

  • 【推荐算法】单目标精排模型——DIN
  • 阿里云ack部署rabbitmq集群
  • 【sgUploadList】自定义组件:基于elementUI的el-upload封装的上传列表组件,适用于上传附件时
  • 第4章:颜色和背景 --[CSS零基础入门]
  • unity中的UI介绍
  • 外包干了5天,技术明显退步。。。。。
  • 《蓝桥杯比赛规划》
  • unity 2D像素种田游戏学习记录(自用)
  • LearnOpenGL学习(高级OpenGL --> 帧缓冲,立方体贴图,高级数据)
  • kubeadm安装K8s集群之基础环境配置
  • VCU——matlab/simulink软件建模
  • ubuntu22.04 使用可以用的镜像源获取你要的镜像
  • Redisson分布式锁
  • Win10环境vscode+latex+中文快速配置
  • Java-JMX 组件架构即详解
  • Oracle DataGuard启动与关闭顺序
  • spring 源码分析
  • SQL语句在MySQL中如何执行
  • Linux Vi/Vim使用 ⑥
  • AKE 安全模型:CK, CK+, eCK