刷题day2
发表于
|浏览量:
- 移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:
更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
返回 k。
题意
大概意思就是给你一个数组,一个值,返回这个数组去除这个值的顺序数组
解法
暴力遍历最简单
然后优化应该就是双指针了。就这样吧,你可以新开一个数组,然后顺序走++,因为你每次++都一定会填入一个你需要的数值
然后这个数值的得到是通过原始num数组和val是否相等来的,这个也是顺序++判断的
题解还有个解法没仔细看,叫对撞指针?看不明白就这样吧
文章作者: wellorbetter
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 wellorbetter's blog!
相关推荐

2026-04-20
刷题day1
题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作: 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。返回 k。 思路这里要我返回这个顺序递增的这个数组,最暴力就是平移+排序然后我的思路是,你后面这个nums2, 他可以二分找到这个要插入的位置,然后这插入的这个位置是一个顺序set对应每个nums2的元素都需要对nums1来进行二分,如果num1 n, nums2 m,那这里复杂度就是mlogn,然后这里我需要对每个插入的这些nums2的这些元素分别来做排序也就是milogmi, sum mi = m; 每个桶大小 mi,排序 O(mi log mi),总和 O(Σ mi log mi),其中 Σmi = m由于 Σ mi log mi ≤ m log m(当所有元素集中在一个桶...

2026-05-10
刷题day6
爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?f[i] = f[i - 1] + f[i - 2]; 寻找峰值中等相关标签premium lock icon相关企业峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞ 。 你必须实现时间复杂度为 O(log n) 的算法来解决此问题。 这个题没想出来,这里看了下答案,这个答案是真天才。不过这些题目确实转化一下就有思路了,这里有对称性,因为你这个是峰值,所以沿着峰值是对称的左边是严格上升,右边是严格下降,所以你只需要找到严格上升的就行了同时看到logn,一眼就是二分然后看,如果分成两半,要看的话应该就是严格递增了,如果什么的话,这个峰值在右边呢?check mid < mid+1 递增的在右边,那右边一定有一个峰值,反之一定在左边注意这里的二...

2026-05-17
刷题day7
验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 严格小于 当前节点的数。节点的右子树只包含 严格大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 思路很简单,就他这个,左子树这个大小能递归拿到,右子树大小也能递归拿到然后左子树小于当前的值大于右子树的值然后递归左子树,递归右子树,取并就行了 单纯数据结构,感觉都不用刷了大一基础还是不赖的 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0)...

2026-06-07
刷题
LRU大概思路就是unordered_map hash+双向链表head,tail拿的时候hahsmap key int value node我能直接get拿到这个node,然后把这个node 先remove,然后插到链表头部put的时候,也是,如果有,就修改这个value,然后remove,再insert如果没有,new一个node,然后再看size和cap的关系,如果大于等于,就要先remove这个tail的一个,然后再insert头 class LRUCache {private: int cap; struct Node { int key, value; struct Node* prev; struct Node* next; Node(int key, int value): key(key), value(value) { } }; struct Node* head; struct Node* tail; unordered_map<int, Node*> m...

2026-05-24
刷题day8
岛屿数量已解答中等相关标签premium lock icon相关企业给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 咋说,比较简单,dfs秒了但是这个也能用并查集做,就差不多吧,反正遍历挨个合并就行了练一下模板吧 123456789101112131415161718const int N = 1e5 + 10;int parent[N], size[N];int find(x) { if (x != parent[x]) parent[x] = find(parent[x]); return parent[x];}int union(int a, int b) { int ra = find(a), rb = find(b); if (size[ra] < size[rb]) { int t = ra; ra = rb...

2026-06-03
刷题day9
无重复字符的最长子串给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 最开始写成模拟了,后来想了一下,这个是滑动队列,很久之前写过,写不太懂了大概就记得维护一个l到r的一个队列,大概就是进来先放当前的这个i这个值如果重复了,那就弹队头,l++然后每次进来先放,然后r++没啥问题 class Solution {public: map<char, int> mp; int lengthOfLongestSubstring(string s) { if (s.size() == 0) return 0; int l = 0, r = 0, res = 1; mp[s[l]] ++; for (int i = 1; i < s.size(); i ++ ) { mp[s[i]] ++ ; r ++ ; // cout << i <&l...

