力扣
陈先生☁
这个作者很懒,什么都没留下…
展开
-
力扣 剑指offer 24.反转链表
解题思路:定义一个链表节点node为nullptr,一个temp节点来存储head->next,让head->next=node,更新node的值为head,head的值为temp,让head结点循环向后遍历,直到head节点为空,此时的node就是反转后链表的头节点代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *原创 2021-11-09 10:36:38 · 281 阅读 · 0 评论 -
力扣 7. 整数反转 C++
解题思路:简单的反转,需要注意int的容量问题知识点:INT_MIN在标准头文件limits.h中定义,定义形式为 #define INT_MAX 2147483647 #define INT_MIN (-INT_MAX - 1) 代码:int reverse(int x){ long n = 0; while (x) { n = n * 10 + x % 10; x /= 10; } return n > INT_MAX || n < ..原创 2021-11-05 18:51:20 · 4673 阅读 · 0 评论 -
力扣 118. 杨辉三角
解题思路:简单的循环利用,将数组每行第一个和最后一个值赋一,其他赋予上面相邻的两个值代码:class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int> > ret(numRows); for(int i=0;i<numRows;i++){ ret[i].resize(原创 2021-11-04 18:58:12 · 86 阅读 · 0 评论 -
力扣 剑指 Offer 09. 用两个栈实现队列 C++
解题思路:用两个栈stack1进数据stack2出数据,出的时候如果stack2为空,stack1不为空,则将stack1中的数据全部导入stack2中代码:class CQueue { stack<int> stack1,stack2;public: CQueue() { while(!stack1.empty()){ stack1.pop(); } while(!stack2.emp.原创 2021-11-03 10:18:48 · 116 阅读 · 0 评论 -
力扣:566. 重塑矩阵
解题思路:当两个数组元素不等或者格式一样时,返回原数组,否则循环nums将nums的值赋给rmat,需要理解的地方主要是,i的值除以rmat的c为rmat的行值,对c求余为rmat的列值,nums同代码:class Solution {public: vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) { int m =原创 2021-11-02 19:43:21 · 109 阅读 · 0 评论 -
力扣 121.买卖股票的xx时机 C++
解题思路:定义一个low记录prices值最低的位置,Max记录最大的利润,遍历数组如果比low位置的值更低,则更新low的位置,否则则更新Max为Max和距离最低价格位置的差的最大值,需要注意的是当数组只有一个值时应分开讨论代码:class Solution {public: int maxProfit(vector<int>& prices) { //如果prices只有一个数据则返回0 if(prices.size()==1)原创 2021-11-01 21:13:27 · 121 阅读 · 0 评论 -
力扣 350. 两个数组的交集 II C++
解题思路:循环遍历两个数组,相等则存入num3,并将num1此处的值赋为非法值代码:class Solution {public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { vector<int> nums3; //接交集 //遍历两个数组,找到相等的值 for(int num2:nu原创 2021-11-01 20:29:54 · 3780 阅读 · 0 评论 -
力扣 88. 合并两个有序数组 C++
解题思路:第二次做这样的题了,还是错了,整体思路就是用三个指针,mid指向nums1有值的最后一个即m-1,end指向nums1的最后一个即m+n-1,n-1指向nums2的最后一个循环遍历到mid或者n-1一个为空,值得注意的是:要判断nums2是否遍历完,要是没有遍历完需要把nums2的值赋到nums1里代码:class Solution {public: void merge(vector<int>& nums1, int m, vector<int>原创 2021-10-31 20:35:47 · 142 阅读 · 0 评论 -
力扣 1.两数之和 C++
解题思路:以前写过一样的题目,比较简单,但是容易出错,或者忘了重复元素不再去查找代码:class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> num; int first=0,second=0; for(first;first<nums.size()-1;first++)原创 2021-10-31 20:08:52 · 234 阅读 · 0 评论 -
力扣:53. 最大子序和 C++
解题思路:prv记录前面值的和,如果prv+it>it即前面的值加上现在数这个值小于这个数本身,则直接从这个数开始计算,这个数作为第一数,继续找下去,Max记录片段的最大值代码:class Solution {public: int maxSubArray(vector<int>& nums) { int Max=nums[0],prv=0; for(int it:nums){ prv=max((prv+i原创 2021-10-31 19:58:36 · 4221 阅读 · 0 评论 -
力扣 19. 删除链表的倒数第 N 个结点 C++
解题思路:利用双指针,指针node2先走N个值,然后循环当node2->next!=nullptr时,node1循环向后移动,当node2位于链表最后一位时,node1就是要删除节点的前一个,直接让node1->next=node1->next->next,即可需要注意的地方:当node2移动N个值后已经是空指针时,则n==1,则说明链表只有一个元素,n!=1,则说明删除的是第一个元素,这两种情况要分开讨论代码:/** * Definition for sin原创 2021-10-31 19:17:08 · 250 阅读 · 0 评论 -
力扣 876. 链表的中间结点
解题思路:定义一个size记录链表长度,第一次遍历确定链表的长度,第二次遍历(size+1)/2个即为中间节点代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr)原创 2021-10-31 17:58:49 · 71 阅读 · 0 评论 -
力扣 557. 反转字符串中的单词 III C++
解题思路:先写一个反转begin到end的函数,然后去查找s中每个单词的首和末尾的空格,调用反转函数遇到的问题:写反转函数时,起初使用的是无返回值的函数,但是调用后发现s里的值不改变,后面改为返回s,并用s重新接代码:class Solution {public: string resver(string s,int begin,int end) { while(begin<end) { swap(s[begin]原创 2021-10-30 17:10:37 · 251 阅读 · 1 评论 -
力扣 344. 反转字符串 C++
解题思路:简单的反转遍历,交换即可代码:class Solution {public: void reverseString(vector<char>& s) { int start=0,end=s.size()-1; while(start<end) { swap(s[start],s[end]); start++; end--;原创 2021-10-30 16:34:57 · 142 阅读 · 0 评论 -
力扣 167. 两数之和 II - 输入有序数组 C++
解题思路:第一眼看过去觉得比较简单双指针循环遍历就好,但是需要注意判断是否有重复元素,重复元素不再去寻找代码:class Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { vector<int> sum; for(int first=0;first<numbers.size()-1;first++){原创 2021-10-29 19:16:29 · 185 阅读 · 0 评论 -
力扣 278. 第一个错误的版本C++
解题思路: 二分查找简单应用代码:// The API isBadVersion is defined for you.// bool isBadVersion(int version);class Solution {public: int firstBadVersion(int n) { int left=1,right=n; while(left<right) { int mid=left...原创 2021-10-29 18:49:17 · 78 阅读 · 0 评论 -
力扣 35. 搜索插入位置 C++
解题思路:利用二分查找的方法找到应该插入的位置,插入代码:class Solution {public: int searchInsert(vector<int>& nums, int target) { int left=0,right=nums.size()-1; while(left<=right) { int mid=left+(right-left)/2;原创 2021-10-29 18:45:06 · 131 阅读 · 0 评论 -
力扣 217. 存在重复元素 C++
解题思路:利用哈希表,循环插入元素,如果插入时发现已经存在则返回正确代码:class Solution {public: bool containsDuplicate(vector<int>& nums) { unordered_set<int> num; for(int it:nums) { if(num.find(it)!=num.end()) {原创 2021-10-29 18:42:16 · 156 阅读 · 0 评论 -
力扣 977. 有序数组的平方 C++
解题思路:遍历数组nums,将它的成员的值平方赋值给nums2代码:class Solution {public: vector<int> sortedSquares(vector<int>& nums) { vector<int> nums2; for(int it:nums) { nums2.push_back(it*it); }原创 2021-10-29 18:37:56 · 170 阅读 · 0 评论 -
力扣 189. 旋转数组 C++
解题思路:先写一个反转start—end的函数,将整个数组反转,再依次旋转数组的前k个值和剩下的值反转过程: 原始数组 1234 5 6 7 第一次反转7 6 5 4 3 2 1 第二次反转 5 ...原创 2021-10-29 18:31:52 · 116 阅读 · 0 评论 -
面试题 08.07. 无重复字符串的排列组合 C++
无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。示例1:输入:S = "qwe"输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]示例2:输入:S = "ab"输出:["ab", "ba"]提示:字符都是英文字母。字符串长度在[1, 9]之间。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutation-i-lcci...原创 2021-10-26 18:30:40 · 176 阅读 · 0 评论 -
力扣 704. 二分查找 C++
解题思路与方法:left对应查找的起始位置,right对应查找的最后位置,mid对应中间位置比较mid处的值和target.的值,如果相等则返回,大于则让right改到mid-1处,小于则left改为mid+1处总结:简单的也是最经典的二分查找,要注意的地方主要是:1、求mid的值时应该采取left+(right-left),不能采取(right+left)/2,以防止数据溢出;2、大于时,right应改到mid-1处,小于时left应改到mid+1处,以减少运行时间class Solut原创 2021-10-27 19:44:58 · 110 阅读 · 0 评论 -
力扣283. 移动零 C++
解题思路:定义两个指针,指针zero用来找零的位置,nzero用来找zero指针后下一个非零,找到后交换两个位置的值,继续找零的位置class Solution {public: void moveZeroes(vector<int>& nums) { int len=nums.size(), nzero=0; for(int zeor=0;zeor<len;zeor++){ if(nums[zeor]==0)原创 2021-10-30 16:35:16 · 225 阅读 · 0 评论