1.【LeetCode448】:448. 找到所有数组中消失的数字

题目分析: 1-n之间有重复的,有没出现的,有出现一次。使用hashmap,空间复杂度为O(n)

方法一:哈希表,但是空间复杂度超过了O(n)

思想:

  1. 可以用hashmap存储数据,建立映射。
  2. 从1-n去遍历,看hashmap中有没有出现元素。
  3. 有出现,下一个继续遍历,没有传入数组。

方法二: 使用数组本身,这样空间就不会多用

思想:

  1. 已知元素的范围是1-n,数组下标的范围是0-n-1。从头开始遍历,比如说4,把它转换为对应的下标就是3,把3下标对应的元素变为负数(或者加n),这样就相当于 标记 与下标3对应的数。
  2. 如果某个数我们已经处理过了,这时候就要还原,然后再比较。
  3. 最后再遍历一次,找出没出现过的下标。

示例:

	|
4 3 2 7 8 2 3 1
0 1 2 3 4 5 6 7
遍历:4-1=3,把下标为3的元素前填负号->-7
3-1=2,把下标为2的元素前填负号->-2
遍历一遍后,数组变为
-4 -3 -2 -7 8 2 -3 -1
所以4和5这对应数字没有出现过,就是5和6没有出现过

题解:

class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
int n=nums.size();
for(int num:nums){
int x=(num-1)%n;//对n取模还原它本来的值
nums[x]+=n;//对这个元素加n
}
vector<int> ans;
for(int i=0;i<n;i++){
if(nums[i]<=n){
ans.push_back(i+1);
}
}
return ans;
}
};

2【LeetCode48】48. Rotate Image (Medium)

题目分析:要进行原地计算。1.寻找规律 2.按顺序进行旋转操作,避免覆盖原始值。

可以将旋转过程简化为两个翻转操作:

先按照主对角线进行翻转,再左右翻转

题解:

class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for(int i = 0; i<n;i++){
for(int j=0;j<i;j++){//对交线翻转
swap(matrix[i][j],matrix[j][i]);
} }
for(int i = 0; i<n;i++){
for(int j=0;j<n/2;j++){//左右翻转
swap(matrix[i][j],matrix[i][n-1-j]);
}
}
}
};

3 【LeetCode240】240. Search a 2D Matrix II (Medium)

题目分析:在矩阵中不是边界的点有四个方向,所以我们要从某个边界开始,将四个方向转换为两个方向。这道题从右上或者左下都可以。

题解:

class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m=matrix.size();//行
int n=matrix[0].size();//列
if(m==0) return false;
// int i=0,j=n-1;//从右上开始搜索
// while(i<m&&j>=0){
// if(matrix[i][j]==target){
// return true;
// }else if(matrix[i][j]>target){
// --j;
// }else{
// ++i;
// }
// } int i=m-1,j=0;//从左下开始搜索
while(i>=0&&j<n){
if(matrix[i][j]==target){
return true;
}else if(matrix[i][j]>target){
--i;
}else{
++j;
}
}
return false;
}
};

4 【LeetCode769】:769. Max Chunks To Make Sorted (Medium)

题目分析:因为数组元素的特性,它的元素大小范围是0-n-1(并且不重复),刚好与数组下标对应。

从左往右遍历,同时记录当前的最大值,每当 当前最大值 等于数组位置时,我们可以多一次分割。

为什么可以通过这个算法解决问题呢?

1.如果当前最大值大于数组位置,则说明右边一定有小于数组位置的数字,需要把它也加入待排序的子数组;

2.又因为数组只包含不重复的0 到n,所以当前最大值一定不会小于数组位置。

3.所以每当当前最大值等于数组位置时,说明 当前最大值 之前的值都已经出现过了,可以进行一次划分,对后续划分没有影响。我们可以成功完成一次分割。

题解:

class Solution {
public:
int maxChunksToSorted(vector<int>& arr) {
int ans=0;
int m=0;
for(int i=0;i<arr.size();++i){
m=max(m,arr[i]);
if(m==i) ++ans;
}
return ans;
}
};

LeetCode数组刷题——448、48、240、769的更多相关文章

  1. [LeetCode] 系统刷题5_Dynamic Programming

    Dynamic Programming 实际上是[LeetCode] 系统刷题4_Binary Tree & Divide and Conquer的基础上,加上记忆化的过程.就是说,如果这个题 ...

  2. LeetCode的刷题利器(伪装到老板都无法diss你没有工作)

    在工程效率大行其道的今天,如果不会写点代码以后也不容易在测试圈混下去.今天给大家推荐一个LeetCode的刷题利器,可以伪装到连你老板在这里走过去都无法确认你是在干活呢,还是在干活呢. LeetCod ...

  3. leetcode top-100-liked-questions刷题总结

    一.起因 宅在家中,不知该做点什么.没有很好的想法,自己一直想提升技能,语言基础自不必言,数据结构还算熟悉,算法能力一般.于是乎,就去刷一通题. 刷题平台有很多,我选择了在leetcode进行刷题.回 ...

  4. LeetCode 高效刷题路径

    LeetCode 高效刷题路径 Hot 100 https://leetcode.com/problemset/hot-100/ https://leetcode-cn.com/problemset/ ...

  5. leetcode 算法刷题(一)

    今天开始刷Leetcode上面的算法题.我会更新我刷题过程中提交的代码(成功和不成功的都有)和比较好的解法 第二题 Add Two Numbers 题目的意思:输入两个链表,这两个链表都是倒序的数字, ...

  6. leetcode每日刷题计划-简单篇day5

    刷题成习惯以后感觉挺好的 Num 27 移除元素 Remove Element 跟那个排序去掉相同的一样,len标记然后新的不重复的直接放到len class Solution { public: i ...

  7. leetcode每日刷题计划-简单篇day3

    收到swe提前批面试hhh算是ep挂了的后续 努力刷题呀争取今年冲进去! Num 21 合并两个有序链表 Merge Two Sorted Lists 注意新开的链表用来输出结果的是ListNode ...

  8. leetcode每日刷题计划-简单篇day1

    orzorz开始刷题 争取坚持每周平均下来简单题一天能做两道题吧 非常简单的题奇奇怪怪的错误orz越不做越菜 Num 7 整数反转 Reverse Integer 刚开始多给了一个变量来回折腾占地方, ...

  9. LeetCode随缘刷题之Java经典面试题将一个字符串数组进行分组输出,每组中的字符串都由相同的字符组成

    今天给大家分享一个Java经典的面试题,题目是这样的: 本题是LeetCode题库中的49题. 将一个字符串数组进行分组输出,每组中的字符串都由相同的字符组成 举个例子:输入["eat&qu ...

随机推荐

  1. Mysql的索引及优化

    一:四种存储引擎: mysql使用 show engines查询其存储引擎: 功  能 MYISAM Memory InnoDB Archive 存储限制 256TB RAM 64TB None 支持 ...

  2. 什么是通用 SQL 函数?

    1.CONCAT(A, B) – 连接两个字符串值以创建单个字符串输出.通常用于将两个 或多个字段合并为一个字段. 2.FORMAT(X, D)- 格式化数字 X 到 D 有效数字. 3.CURRDA ...

  3. 判断集合中存在String字符串 或 判断集合中不存在String字符串

    一.使用场景 用于集合中有多个相近的字符,无法使用包含判断 如: 这里如果我想判断以上集合中是否包含"信封件-DE"就会被"信封件-DE2"影响到 毕竟:&qu ...

  4. 面试题目:手写一个LRU算法实现

    一.常见的内存淘汰算法 FIFO  先进先出 在这种淘汰算法中,先进⼊缓存的会先被淘汰 命中率很低 LRU Least recently used,最近最少使⽤get 根据数据的历史访问记录来进⾏淘汰 ...

  5. 03-三高-并行并发&服务集群

          三高项目 服务并行&并发 并行和并发 服务的搭建中,并行 并发.----并发. 集群 同质的(同样的配置,运行同样的程序,对外提供同样的服务). 修改同样的存储,可以认. (小建议 ...

  6. 快速安装 kafka 集群

    前言 最近因为工作原因,需要安装一个 kafka 集群,目前网络上有很多相关的教程,按着步骤来也能完成安装,只是这些教程都显得略微繁琐.因此,我写了这篇文章帮助大家快速完成 kafka 集群安装.   ...

  7. 使用pyinstaller库打包文件

    1.pyinstaller的安装 先win+r打开cmd,安装具体命令如下: pip3 install pyinstaller  2.使用pyinstaller库打包文件 假设Python源文件LPR ...

  8. Spring-Bean标签属性scope范围

    scope:指对象的作用范围,取值如下 1.singleton:默认值,单例的 2.prototype:多例的 3.request:WEB项目,Spring创建一个Bean的对象,把对象存入到requ ...

  9. FreeRTOS+CubeMX编程实践

    一.关于FreeRTOS 1.什么是FreeRTOS? FreeRTOS是一个轻量级的操作系统.FreeRTOS提供的功能包括:任务管理.时间管理.信号量.消息队列.内存管理.记录功能等,可基本满足较 ...

  10. ajax - 终结篇jsonp,防抖节流

    今天是我们最后一天ajax的学习,这次学完总可以去vue了吧,我不信还有什么拦路石,先不说其他的先看看今天的内容. 1. 首先是同源策略,什么叫做同源? 如果两个页面的协议.域名.端口都相同的话,我们 ...