41. 缺失的第一个正数

难度困难770

给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。

示例 1:

输入: [1,2,0]
输出: 3

示例 2:

输入: [3,4,-1,1]
输出: 2

示例 3:

输入: [7,8,9,11,12]
输出: 1

提示:

你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。

看了一些解法是把数组当做哈希表...,这个技巧好像还用的不是很少哦

原地哈希   f(nums[i]) = nums[i] - 1

while (nums[i] > 0 && nums[i] <= len && nums[nums[i] - 1] != nums[i]) {
                // 满足在指定范围内、并且没有放在正确的位置上,才交换
                // 例如:数值 3 应该放在索引 2 的位置上
                swap(nums, nums[i] - 1, i);
            }

不断置换

class Solution {
public:int firstMissingPositive(vector<int>& nums) {for(int i=0;i<nums.size();i++){// nums[i]=3  nums[3-1]=nums[2]  所以将nums[2]与nums[i]while(nums[i]>0&&nums[i]<=nums.size()&&nums[nums[i]-1]!=nums[i])swap(nums[i],nums[nums[i]-1]);}int ans=1;for(int i=0;i<nums.size();i++){if(nums[i]==ans) ans++;}return ans;}
};

另一种哈希是负号标记

class Solution {
public:int firstMissingPositive(vector<int>& nums) {int n = nums.size();for (int& num: nums) {if (num <= 0) {num = n + 1;}}for (int i = 0; i < n; ++i) {int num = abs(nums[i]);if (num <= n) {nums[num - 1] = -abs(nums[num - 1]);}}for (int i = 0; i < n; ++i) {if (nums[i] > 0) {return i + 1;}}return n + 1;}
};作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/first-missing-positive/solution/que-shi-de-di-yi-ge-zheng-shu-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

42. 接雨水

难度困难1644

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。

示例:

输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6

啊这.....解法有很多种...暴力、dp、双指针、单调栈....

class Solution {
public:int trap(vector<int>& height) {//接雨水//看不懂//就他妈离谱vector<int> newheight(height.size());vector<int> newheight2(height.size());vector<int> ans(height.size());int count=0;if(height.size()==0) return 0;//有墙的也能接啊,我们观察一下此处接的雨水和什么有关//2->(1,3)   4->(3,7) 5->(3,7) 6->(3,7) 9->(8,10)//左边最高和右边最高的较低的一个?newheight[0]=height[0];for(int i=1;i<height.size();i++){newheight[i]=max(height[i],newheight[i-1]);}newheight2[height.size()-1]=height[height.size()-1];for(int i=height.size()-2;i>=0;i--){newheight2[i]=max(height[i],newheight2[i+1]);}for(int i=0;i<height.size();i++){ans[i]=min(newheight[i],newheight2[i]);count+=ans[i]-height[i];}return count;}
};

43. 字符串相乘

难度中等475

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

44. 通配符匹配

难度困难518

给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。

'?' 可以匹配任何单个字符。
'*' 可以匹配任意字符串(包括空字符串)。

两个字符串完全匹配才算匹配成功。

说明:

  • s 可能为空,且只包含从 a-z 的小写字母。
  • p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *

示例 1:

输入:
s = "aa"
p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。

示例 2:

输入:
s = "aa"
p = "*"
输出: true
解释: '*' 可以匹配任意字符串。

示例 3:

输入:
s = "cb"
p = "?a"
输出: false
解释: '?' 可以匹配 'c', 但第二个 'a' 无法匹配 'b'。

示例 4:

输入:
s = "adceb"
p = "*a*b"
输出: true
解释: 第一个 '*' 可以匹配空字符串, 第二个 '*' 可以匹配字符串 "dce".

示例 5:

输入:
s = "acdcb"
p = "a*c?b"
输出: false

这个题怎么和前面那个那么像啊,复习一下。

dp题,仔细做一下。/**/

45. 跳跃游戏 II

难度困难688

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

不是DP,是贪心算法

/**/

46. 全排列

难度中等882

给定一个 没有重复 数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]
输出:
[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]
]
class Solution {
public:unordered_map<int,bool> visit;vector<int> tmp;void get(int n,int sum,vector<int>& nums,vector<vector<int>> &ans){if(n>sum) return;if(n==sum){ans.push_back(tmp);return;}for(int i=0;i<nums.size();i++){if(visit[nums[i]]==false){tmp.push_back(nums[i]);visit[nums[i]]=true;get(n+1,sum,nums,ans);visit[nums[i]]=false;tmp.pop_back();}}}vector<vector<int>> permute(vector<int>& nums) {vector<vector<int>> ans;for(int i=0;i<nums.size();i++) visit[nums[i]]=false;get(0,nums.size(),nums,ans);return ans;}
};

47. 全排列 II

难度中等396

给定一个可包含重复数字的序列,返回所有不重复的全排列。

示例:

输入: [1,1,2]
输出:
[[1,1,2],[1,2,1],[2,1,1]
]

去重是怎么做的...?

//当前值用过了 或
//当前值等于前一个值: 两种情况://1 nums[i-1] 没用过 说明回溯到了同一层 此时接着用num[i] 则会与 同层用num[i-1] 重复//2 nums[i-1] 用过了 说明此时在num[i-1]的下一层 相等不会重复if(used[i] || (i>0 && !used[i-1] && nums[i] == nums[i-1])){//用过了continue;
}

48. 旋转图像

难度中等557

给定一个 × n 的二维矩阵表示一个图像。

将图像顺时针旋转 90 度。

说明:

你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

示例 1:

给定 matrix =
[[1,2,3],[4,5,6],[7,8,9]
],原地旋转输入矩阵,使其变为:
[[7,4,1],[8,5,2],[9,6,3]
]
    void rotate(vector<vector<int>>& matrix) {//简单!!//从i,j变成了j ,n-1-i怎么办//不能用新的矩阵!!!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-j-1]);}}

49. 字母异位词分组

难度中等463

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[["ate","eat","tea"],["nat","tan"],["bat"]
]

想不到排序啊hhhhhh,LeetCode搞得时间复杂度pstd了

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {vector<vector<string>> res;unordered_map <string,vector<string> > m;for(string& s : strs){string t = s;sort(t.begin(),t.end());m[t].push_back(s);   //t为单词的按顺序排列,作为key值,m[t]则为该单词的异位词构成的vector,作为value值}for(auto& n : m)                //n为键和值组成的pairres.push_back(n.second);return res;}
};

LeetCode 41-50题相关推荐

  1. 刷题汇总(三)leetcode 精选50题 C++答案总结

    题目来源 腾讯精选练习(50 题) 相关: 刷题汇总(一)leetcode 精选50题 JavaScript答案总结 刷题汇总(二)剑指Offer 66题 C++答案总结 刷题汇总(四)技术类编程题汇 ...

  2. 刷题汇总(一)leetcode 精选50题 JavaScript答案总结

    题目来源 腾讯精选练习(50 题) 信息更新时间:2019-3-11,因为要准备面前端,就用js做了遍来熟悉JavaScript这门语言,50道题均已提交通过. GitHub地址:https://gi ...

  3. LeetCode第50题思悟——Pow(x, n)(powx-n)

    LeetCode第50题思悟--Pow(x, n)(powx-n) 知识点预告 对边界值的处理意识: 对整数溢出的处理: 折半的思想 题目要求 实现 pow(x, n) ,即计算 x 的 n 次幂函数 ...

  4. LeetCode Week 5:第 41 ~ 50 题

    专栏--LeetCode 文章目录 专栏--LeetCode 41. 缺失的第一个正数 42. 接雨水 43. 字符串相乘 44. 通配符匹配 45. 跳跃游戏 II 46. 全排列 47. 全排列 ...

  5. 《剑指 Offer I》刷题笔记 41 ~ 50 题

    <剑指 Offer I>刷题笔记 41_50 排序(中等) 41. 最小的k个数# _解法1:排序 API + 数组复制 API 42. 数据流中的中位数 _解法1:暴力 搜索和回溯算法( ...

  6. 腾讯精选练习 50 题(Leetcode)笔记 PDF下载!

    昨天在知识星球中立了一个Flag,第一步采取的行动就是把以前刷的"腾讯精选练习 50 题"重新梳理一下,就有了今天这本170多页的小册子. 这本小册子即可以作为学习数据结构与算法课 ...

  7. LeetCode刷题记录---腾讯精选练习 50 题

    腾讯精选练习 50 题,后续刷到哪更新到哪~~~加油!

  8. c语言解析sql语句_sql语句面试50题(Mysql版附解析)

    本人最近在自学sql,从开始学到自己写完本练习50题大概花了12天的时间. 学习路径:<sql基础教程>第1遍(3天)→知乎中的sql网课+leetcode刷题(4天)→牛客网刷题(2天) ...

  9. Leetcode重点250题

    LeetCode重点250题 这个重点题目是把LeetCode前400题进行精简.精简方法如下: 删除不常考,面试低频出现题目 删除重复代码题目(例:链表反转206题,代码在234题出现过) 删除过于 ...

  10. sql语句练习50题(Mysql版-详加注释)

    表名和字段 1.学生表       Student(s_id,s_name,s_birth,s_sex) --学生编号,学生姓名, 出生年月,学生性别 2.课程表       Course(c_id, ...

最新文章

  1. go定时器 每天重复_通过测试学习Go:Hello, World
  2. JAVA复习(CharSequence接口、RunTime类、System类、object类中的finalize())
  3. 前端:JS实现数组去重常用的六种方法介绍
  4. 给定数组,去掉0元素后将剩下的元素赋给新的数组
  5. OpenShift 4 之AMQ Streams(4) - 用Prometheus监控Kafka
  6. (转贴)正则表达式学习心得体会(5)
  7. 关于instanceof、isinstance和isAssignableFrom的区别
  8. 2022软考中级软件设计师---易混淆知识点总结1
  9. 计算机开机后无法网络拨号怎样处理,电脑不能拨号上网显示调制解调器已删除怎么办...
  10. Socks代理是什么意思?有什么用?
  11. 2019美亚杯个人赛刷题
  12. HTML基础期末速成笔记
  13. 面试干货!21个必知数据科学面试题和答案
  14. 微信里的小程序怎么制作
  15. 网络安全(2) -- 关于一次XSS攻击-图片(img标签)的onerror事件
  16. winmail不用服务器系统可以吗,用Winmail架设安全可靠的邮件服务器
  17. 计算机端口原理与作用
  18. 猴子摘香蕉问题-人工智能模拟
  19. python 自动化识别H5模板与UI设计是否一致
  20. 如何做好电影解说,值得收藏的电影解说文案网站,电影解说文案素材库网站

热门文章

  1. Springboot毕业设计毕设作品,汽车租赁系统 开题报告
  2. 等额本金和等额本息房贷公式推导
  3. Android Studio Lint 工具看完这一篇还不够
  4. 【关于微信小程序登录信息】 微信即将不再支持wx.getUserInfo() 授权弹出框 2018年5月12日
  5. varnish 缓存php,php实现监控varnish缓存服务器的状态
  6. 预测分析:R语言实现2.4 评估线性回归模型
  7. bidirectional PIM
  8. android 树叶飘落动画,逼真的HTML5树叶飘落动画
  9. 函数——哥德巴赫猜想
  10. 接入微信universal link微信校验不通过