leetcode
力扣、剑指offer
橘子洲长
笔记记笔记
展开
-
力扣136.只出现一次的数(异或运算)
异或是一种逻辑运算,相同为0,不同为1。在C++语言中,使用 ^ 符号表示异或运算符。异或运算的时候只能使用二进制位运算,所以需要先将十进制位转换成二进制位。力扣136 只出现一次的数给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?方法1、暴力法(时间复杂度O(n^2))方法2、哈希法(时间、空间复杂度均为O(n))方法3、排序法(时间复杂度O(nlg(n)))方法原创 2021-07-26 22:03:19 · 215 阅读 · 0 评论 -
三步问题(C++)
题目描述三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。代码实现解法1//时间复杂度o(n) 空间复杂度o(n)class Solution {public: int waysToStep(int n) { vector<int> dp(n+1,0); if(n<3) return n;原创 2021-03-28 20:07:54 · 504 阅读 · 0 评论 -
746 使用最小花费爬楼梯(C++)
题目描述数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。思路只要在当前位置的前两个中选择一个最小值+当前位置的值,就是每个阶梯所花费的最小值代码实现class Solution {public: int minCostClim原创 2021-03-28 19:19:11 · 291 阅读 · 0 评论 -
青蛙跳台阶的问题(C++)
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。思路首先定义一个数组记录那些需要重复计算的值然后找出数组之间的关系式找出初始条件代码实现int numWays(int n){ if(n<=1) return n; int dp[n+1]; // 定义一个数组记录重复使用的数据 dp[原创 2021-03-27 17:39:00 · 710 阅读 · 0 评论 -
344.反转字符串
题目描述: 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。限制: 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。思路: 双指针,同时指向头部和尾部,交换两个位置,然后同时向中间收缩。交换两个数的方法方法1: 使用临时变量////C++//假设场景是调用该函数能够交换两个数的值,所以入参指针和传数组都行//但是不能传值,如void swap(int x,int y)void swap(int *原创 2021-02-27 23:27:21 · 78 阅读 · 0 评论 -
27.移除元素
题目描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。class Solution {public: int removeElement(vector<int>& nums, int val) { //使用两个下标,首先遍历数组 //如果不是目标值,就把元素向前覆盖到数组,相当于删除了元素 //返回下标原创 2021-02-20 20:19:00 · 52 阅读 · 0 评论 -
349. 两个数组的交集
**首先使用两个集合分别存储两个数组中的元素,然后遍历其中的一个集合,判断其中的每个元素是否在另一个集合中,如果元素也在另一个集合中,则将该元素添加到返回值。该方法的时间复杂度可以降低到 O(m+n) **class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { unordered_set<int&.原创 2021-02-20 18:02:55 · 129 阅读 · 0 评论 -
242.有效的字母异位词
使用数组a为s中每个字母+1计数,再遍历t,将出现的字母都减1,最后再遍历数组a,如果有出现不等于0的情况,说明不是异位词。class Solution {public: bool isAnagram(string s, string t) { char a[26]={0}; for(int i=0;i<s.size();++i) { a[s[i]-'a']++; } for(int .原创 2021-02-20 17:02:36 · 83 阅读 · 0 评论 -
35. 搜索插入位置
使用二分法class Solution {public: int searchInsert(vector<int>& nums, int target) { int low=0,high=nums.size()-1,middle; while(low<=high)//当left==right,区间[left, right]依然有效 { middle=(low+high)/2; if(.原创 2021-02-17 23:59:43 · 66 阅读 · 0 评论 -
用两个栈实现队列
class CQueue {public: stack<int>InStack; stack<int>OutStack; CQueue() { } void appendTail(int value) { InStack.push(value); } int deleteHead() { if(InStack.empty()) retur.原创 2021-02-13 20:24:34 · 112 阅读 · 0 评论 -
232.用栈实现队列
class MyQueue {public: stack<int> stack1; stack<int> stack2; /** Initialize your data structure here. */ MyQueue() { } /** Push element x to the back of queue. */ void push(int x) { stack1.push(x);原创 2021-02-13 17:49:46 · 69 阅读 · 0 评论 -
104.二叉树的最大深度
题目:给定一个二叉树,找出其最大深度。先求它的左子树的深度,再求的右子树的深度,最后取左右深度最大的数值 再+1。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * Tre原创 2021-02-08 22:55:06 · 84 阅读 · 0 评论 -
二叉树的遍历 递归+迭代
递归法前序遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullpt原创 2021-02-06 12:27:15 · 98 阅读 · 0 评论 -
对称二叉树
方法1:递归解法关键字:二叉树模式识别:深度周游(递归)和广度周游(队列)子树对称条件:1)它们两个根结点具有相同的值2)每个树的右子树都与另一个树的左子树镜像对称思路:使用两个指针分别指向根结点的左右子树,通过同步移动这两个指针来遍历二叉树,left左移时,right右移;left右移时,right左移;然后判断它们所指向的结点值是否相等。单个递归:是判断传入的两个结点是否相等。时间复杂度:O(n)空间复杂度:O(n)/** * Definition for a binary t原创 2021-01-30 11:28:53 · 90 阅读 · 0 评论 -
107.二叉树的层次遍历II C++
题目:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */c原创 2021-01-24 20:53:21 · 104 阅读 · 0 评论 -
102.二叉树的层序遍历C++
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。原创 2021-01-24 19:25:33 · 553 阅读 · 0 评论 -
替换空格 c++实现
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”class Solution {public: string replaceSpace(string s) { for(int i=0;i<s.length();i++)//遍历字符串 { if(s[i]==' ')//判断空格 s.repl原创 2020-12-10 00:43:19 · 330 阅读 · 0 评论 -
从尾到头打印链表 · C++ · 简单
题目描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。第一想法是使用栈实现,因为后进先出嘛;先遍历整个链表,每经过一个结点,就把该结点放到栈中,当遍历完整个链表后,再从栈顶逐个输出结点的值。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL)原创 2020-11-11 10:25:52 · 203 阅读 · 0 评论 -
AI算法
难度:两颗星计算下列式子#include<conio.h>#include<stdio.h>#include<math.h>#include<stdlib.h>double fun(double x, int n){ int i; double a=1.0,sum=1.0; for(i=1;i<=n;i++) { a*=i; sum+=pow(x,i)/a; } return sum;}void main()原创 2020-06-21 22:52:00 · 276 阅读 · 0 评论 -
从上到下打印二叉树 ·c++ ·中等
01 不换行打印题目描述:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。(结点总数<=1000)思路:实质考察遍历算法(按层次遍历),又称广度优先搜索;每次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来队列的头部取出最早进入队列的结点,重复前面的打印操作,直到队列中所有结点都被打印出来为止。可以使用双端队列deque,也可以使用queue。/** * Definition for a binary tree node. *原创 2020-11-03 22:03:33 · 195 阅读 · 0 评论 -
二分查找 · C++ · 简单
题目描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。class Solution {public: int search(vector<int>& nums, int target) { int low=0; int high=nums.size()-1; int mid; whi.原创 2020-11-01 18:00:31 · 100 阅读 · 0 评论 -
斐波那契数列 · C++ · 简单
题目描述:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。要求0<=n<=100。思路分析使用递归法class Solution .原创 2020-10-27 10:28:11 · 1557 阅读 · 0 评论 -
数组中重复的数字 · C++ · 简单
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。原地哈希注意题目描述:一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的 范围 内,这个 范围 恰好与数组的下标可以一一对应。所以我们可以执行某种操作,使索引与值一一对应,即索引 0 的值为 0,索引 1 的值为 1。而一旦某个索引的值不只一个,则找到了重复的数字,也即发生了 哈希冲突.转载 动图演示原创 2020-10-26 21:25:18 · 513 阅读 · 0 评论 -
判断链表中是否有环·C++·简单
判断给定的链表中是否有环扩展:你能给出空间复杂度的解法么?原创 2020-10-24 22:21:59 · 946 阅读 · 0 评论 -
反转链表 · C++ · 简单
题目:输入一个链表,反转链表后,输出新链表的表头。指针pre指向null,cur指向pHead头节点遍历链表(也就是cur不为空时),先用一个临时的指针变量temp指向cur的next,然后将cur的next指向pre,pre和cur都向前走一位,走到最后,cur指向null,pre指向最后一个节点(这时也就是链表反转后的头节点)。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x),原创 2020-10-21 21:15:16 · 179 阅读 · 0 评论