leetcode刷题
For Rainbow
昂首挺胸,大步向前
展开
-
浅析二分查找
二分查找法1.含义:二分查找算法,也叫折半查找算法。二分查找的思想非常简单,有点类似分治的思想。二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间缩小为02.使用条件:题目强调数组中为有序数组,且无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的。3.注意要点:边界条件的控制,二分查找涉及的很多的边界条件,逻辑比较简单,但有些东西容易混乱。例如到底是while(left<right)还是whi原创 2022-01-19 21:14:03 · 367 阅读 · 0 评论 -
leetcode刷题 15.三数之和
分析:1.特判,对于数组长度 nn,如果数组为 null 或者数组长度小于 33,返回 []。2.对数组进行排序。3.遍历排序后数组: 若 nums[i]>0:因为已经排序好,所以后面不可能有三个数加和等于 0,直接返回结果。 对于重复元素:跳过,避免出现重复解 令左指针 L=i+1,右指针 R=n−1,当 L<R 时,执行循环: 当nums[i]+nums[L]+nums[R]==0,执行循环,判断左界和右界是否和下一位置重复,去除重复解。并同时将 L,.原创 2022-01-11 14:04:08 · 69 阅读 · 0 评论 -
leetcode刷题 82.删除排序链表中的重复元素Ⅱ
题目解析:因为本题是使用链表,且题目要求删除连续重复数字,由此可以想到我们应该使用双指针的方法。代码实现:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} *.原创 2022-01-08 21:51:30 · 335 阅读 · 0 评论 -
leetcode刷题 162.寻找峰值
题目分析:通过题目,我们发现这题的本质是寻找一段数组范围内的最大值,我们可以通过不断的缩小数组范围来寻找目标值,由缩小数组范围我们可以联想到二分查找,但是此二分查找有一不同点,就是中值不是同左右界值进行比较,而是和中值相邻的数值进行比较,究其原因是因为峰值的特点是大于相邻值。代码:class Solution {public: int findPeakElement(vector<int>& nums) { int left=0,right=nu.原创 2022-01-08 11:10:32 · 182 阅读 · 0 评论 -
leetcode刷题 153.寻找旋转排序数组中的最小值
题目分析:解法一:该题是用来寻找最小值,我们可以直接用数组求最小值的方法来进行求解,但是我们观察到此题数组是一个旋转数组,只要除第一位外后面每一位比第一位小,那么它就是最小值,否则第一位就是最小值class Solution {public: int findMin(vector<int>& nums) { for(int i=0;i<nums.size();i++) { if(nums[i]&.原创 2022-01-08 10:32:58 · 118 阅读 · 0 评论 -
leetcode刷题 74.搜索二维矩阵
题目分析这是一道简单的查找二维矩阵的题目,所以解决这题有一个最简单的解法就是遍历二维数组即可;但是我们应该注意到题目中的每行整数从左到右是按升序排列的,第一个整数大于前一行的最后一个整数,介于此,我们可以想到使用二分查找。解法1:class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { for(auto i:matrix).原创 2022-01-06 10:26:50 · 510 阅读 · 0 评论 -
Leetcode刷题 33.搜索旋转排序数组
分析:首先看到这题的第一印象是题目很长,感觉很复杂,但仔细看下来之后发现题目中间一段对解题没有任何的帮助,重点在最后一句,大概意思就是在目标数组中找到目标数据,并传出对应位置,否则传出-1清楚了目的,由此想到了第一种解法:即直接循环数组,与目标数据匹配。顺利通过测试。int search(vector<int>& nums, int target) { int temp=0,flag=-1; //flag用来记录是否找到目标数据,temp用来记录位置.原创 2022-01-05 18:43:08 · 3847 阅读 · 0 评论 -
Leetcode刷题 34.在排序数组中查找元素的第一个和最后一个位置
解法1:class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> temps; int i=0;//i记录位置 int temp=0;//用来区分初始位置和结束位置 for(auto m:nums)//遍历数组 { .原创 2022-01-04 10:34:23 · 3078 阅读 · 0 评论 -
leetcode刷题 2.两数相加
解法/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(n.原创 2022-01-04 09:42:15 · 663 阅读 · 0 评论