首页 > 其他分享 >LeetCode 面试经典150题---001

LeetCode 面试经典150题---001

时间:2024-04-06 19:13:17浏览次数:46  
标签:150 nums int 元素 --- -- 001 数组 nums1

少年听雨歌楼上,红烛昏罗帐。

壮年听雨客舟中,

江阔云低、断雁叫西风

而今听雨僧庐下鬓已星星也。

悲欢离合总无情,

一任阶前、点滴到天明。

### 88. 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[j] <= 109

定位是简单题,由于题目给的nums1的长度是m+n,因此我们可以直接从nums1的尾部放入较大的元素,这样就可以不用额外创建数组来存,即双指针的思想。[复习一下归并排序]

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int i = m - 1, j = n - 1, cur = m + n - 1;
        while(i >= 0 && j >= 0){
            if(nums1[i]>= nums2[j]) nums1[cur --] = nums1[i --];
            else nums1[cur --] = nums2[j --];
        }
        while(i >= 0) nums1[cur --] = nums1[i --];
        while(j >= 0) nums1[cur --] = nums2[j --];
    }
};

### 27. 移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100
题目要求要原地操作,也是双指针,i为等于val的位置,即需要被后续不等于val的值覆盖,j为每次循环判断的位置。

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int i = 0, j = 0;
        for(int num : nums){
            if(num == val) j ++;
            else nums[i ++] = nums[j ++];
        }
        return i;
    }
};

### 26. 删除有序数组中的重复项

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。返回 k 。
1 <= nums.length <= 3 * 104
-104 <= nums[i] <= 104
nums 已按 非严格递增 排列
题目的意思是返回不重复元素的个数k,但是还要满足nums数组的前k个数正好就是不重复的k个数。其实也是双指针的思想(这是捅了双指针的窝吗)。i表示当前重复的元素位置,需要被后面不重复的元素覆盖,如果此时的元素没有重复,直接令nums[i] = nums[j], i ++;否则说明当前i不能被j位置的元素替代,因此重复了,因此i不变,继续循环j,直到找到不重复的元素替代。

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if(n < 2) return n;
        int i = 1;
        for(int j = 1;j < n;j ++ ){
            if(nums[j] != nums[i - 1]) nums[i ++] = nums[j];
        }
        return i;
    }
};

### 80. 删除有序数组中的重复项 II
和上面那题基本一样,不过这题要求重复的元素只出现两次...同样的,我们判断的时候只需要判断位置i的前两个元素和待插入的位置j的元素是否相等即可。

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if(n < 3) return n;
        int i = 2;
        for(int j = 2;j < n; j ++ ){
            if(nums[j] != nums[i - 2]) nums[i ++] = nums[j];
        }
        return i;
    }
};

总结,简单题,但是思路挺多的,尽量还是不要用暴力,挺无脑的

标签:150,nums,int,元素,---,--,001,数组,nums1
From: https://www.cnblogs.com/timeac-coder/p/18117764

相关文章

  • 14-失败的经验
    11,我初中阶段那么努力地学习!学习成绩直线上升,为什么还像个傻子一样!而如今却好了很多!最大原因是当时不看书,没有形成新的价值观!从现在开始,每天晚上20-21点看书,然后回寝玩两个人小时,然后睡觉,我的学习效率应该会提升很多很多的!2,为什么有些人就能很简单的成功!这就好比“闻烟”......
  • buuctf-misc-荷兰宽带数据泄露
    解压后是个conf.bin文件,010editor打开没有发现什么隐藏信息、熟悉的文件头之后了解到一个新工具,RouterPassView这是下载地址:https://www.nirsoft.net/utils/router_password_recovery.html可以同时下载到中文翻译包利用这个工具打开conf.bin搜索flag、username、password等......
  • Python常用算法--排序算法【附源码】
    应用具体python案例方式展示各种排序的要点,特别是希尔排序、插入排序、选择排序、冒泡排序、堆排序、快速排序、归并排序七个具体的排序算法。一、希尔排序:解释:希尔排序(ShellSort)是一种插入排序的改进版本,也被称为缩小增量排序。希尔排序通过比较相距一定间隔的元素,将大间隔......
  • 数组-二维数组
    本笔记为47数组-二维数组定义方式_哔哩哔哩_bilibili的学习笔记二维数组定义方式注:常用第二种方式定义,原因:第二种方式更清晰列数可以省行数不可省,详见上述第四种定义方式示例:二维数组数组名 作用:示例:二维数组案例-考试成绩#include<bits/stdc++.h>us......
  • buuctf-misc-九连环
    解压后发现一张图片,详细信息里面没内容,用010editor打开发现图片后面隐藏了一个压缩包,提取出压缩包压缩包其中一个文件加密了,再用010editor打开,将目录区的01改为00去除伪加密解压,得到一张图片与一个压缩包,压缩包有密码,试了不是伪加密那么只能从图片入手了,详细信息没有内容,十六......
  • [转帖]【Linux】使用 apt-get 查询并安装指定版本的软件
    https://zhuanlan.zhihu.com/p/540712989 一、通过apt-get安装指定版本的软件$sudoapt-getinstallpackage=versionversion是软件版本号,package是要安装的软件二、查询指定软件有多少个版本1、通过网站搜索https://packages.ubuntu.com/2、使用apt-cachem......
  • Verification -- Basic Concepts ~ 2. Techniques
    VerificationTechniques数字设计验证中使用了多种技术,包括:功能仿真:仿真涉及在计算机或仿真器上运行数字设计以验证其功能。仿真环境可能包括各种输入,例如测试向量,以确保设计按预期运行。形式验证:形式验证涉及使用数学证明来验证设计的正确性。该技术通常用于关键设计,例如安......
  • 机器学习和深度学习--李宏毅 (笔记与个人理解)Day7
    Day7RegressionCasestudy(预测宝可梦的cp)Regression可以做什么?股票预测自动驾驶推荐预测宝可梦的cp(能力类似这样的属性把)这里突然想到,是不是可以用洛克王国和赛尔号做事情哈哈注意:用下标来表示某一个完整的物体的某一个部分,例如:x表示妙蛙种子;那么xhp就表示......
  • 国科大Python编程基础--编程基础Chapter02
    ......
  • buuctf-misc-snake
    打开压缩包,是张图片,详细信息里没有东西,用010editor看看有没有隐藏东西后面藏了个压缩包,保存下来,没有密码,解压得到两个文件一个密文文件,一个密钥文件密钥经base64解码后得到WhatisNickiMinaj'sfavoritesongthatreferstosnakes?使用万能的搜索引擎得到答案anaconda......