自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 问答 (1)
  • 收藏
  • 关注

原创 2020-5-31 数组中只出现一次的两个数字

题目:数组中只出现一次的两个数字描述一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。示例1输入:[1,4,1,6]返回值:[4,6]说明:返回的结果中较小的数排在前面数组全部元素异或。因为有两个元素不等,所以相同数字相消,结果一定不为0找到右边第一个不相等的位,即异或结果右边第一个1,并设置一个变量 t ,只有该位为1数组均异或 t ,结果为0的为一组,大于0的为一组。可以将数组中两个不相等的数字分开再将两组分别异或可以获取两个数

2021-05-31 21:04:20 89

原创 2021-05-30 和为S的连续正数序列

题目 和为S的连续正数序列描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!返回值描述:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序示例1输入:9返回值:

2021-05-30 21:25:24 85

原创 2021-05-28 数字在升序数组中出现的次数

class Solution {public: int GetNumberOfK(vector<int> data ,int k) { //二分查找 int low = 0; int high = data.size()-1; int mid = 0; int count = 0; while(low <= high) { mid = (low+

2021-05-30 20:59:21 93

原创 2021-05-25 整数中1出现的次数(从1到n整数中1出现的次数)

class Solution {public: int NumberOf1Between1AndN_Solution(int n) { int chu = n; int yu = n%10; int sum = 0; int e = 1; while(chu) { chu /=10; if(yu == 0) sum += c

2021-05-27 20:46:37 115

原创 2021-5-22最小的K个数

题目描述给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组冒泡排序class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int> vec; int len = inpu

2021-05-23 20:49:38 54

原创 2021-5-21栈的压入弹出序列

题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)示例1输入[1,2,3,4,5],[4,3,5,1,2]返回值false解法1:设置一个临时数组isPop,记录遍历出栈数组时已经出栈的元素。其中位置关系按照入栈数组。遍历出栈数组

2021-05-21 16:47:55 62

原创 20201-5-17 调整数组使奇数在偶数前面

题目 调整数组使奇数在偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。示例1输入[1,2,3,4]返回值[1,3,2,4]示例2输入[2,4,6,5,7]返回值[5,7,2,4,6]解1 设置两个数组设置一个奇数数组、和偶数数组,遍历一半array,加入对应数组,然后将偶数数组拼接到奇数数组后面。class Solution {public:

2021-05-17 11:00:12 45

原创 2021-5-16二进制中1的数目

题目输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。示例1输入10返回值2解1 位移动由于负数符号位为1,对于数字的右移,补位为符号位,因此判断时,我们先将n的符号位转0,转成一个整数temp,然后判断temp的1位数有几位。判断方法:设置一个计数变量通过循环,循环条件为temp不为0。每次将temp&1,获取最后一位的值。如果是1,nCount+1;否则不加temp右移一位。当temp为0,即没有1了。此时再判断n的大小,小于0则nCount+

2021-05-16 17:03:03 127

原创 2021-05-14 矩阵

题目我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:解我们绘制出n为1~5的所有可能的图案:通过查找规律,在求结过程中number图案个数过程中:当第一个方块为类型为竖直的,获取number-1的可能图案数即可当前两个方块为水平,获取number-2的可能图案数即可因此初始值:number = 0 :0number = 1 :1number = 2 :2num

2021-05-15 11:02:13 63

原创 2021-05-11 构建乘积数组

题目给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。示例1输入[1,2,3,4,5]返回值[120,60,40,30,24]解实例:A:2,4,1,9,

2021-05-11 16:42:01 47

原创 2021-05-09不用加减乘除做加法

解如果无法通过加减乘除,则思路只能通过位运算。不带进位,求出结果sum求出所有的进位carrycarry左移一位(因为进位是针对于当前相加的前一位)重复1,直到carry = 0;class Solution {public: int Add(int num1, int num2) { int carry = 0; int sum = 0; while(num2 != 0){ sum = num1 ^ num2

2021-05-09 21:27:47 46

原创 2021-05-05 旋转数组求最小值 求字符串中第一个只出现一次的字符

旋转数组求最小值题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。示例1输入:[3,4,5,1,2]输出:1解:该题采用二分查找的方法。首先取中间元素,然后和数组左边元素进行比较。由于数组是部分有序:如果arr[ mid ] < arr[ low ],说明 mid 左部不是一直递增的,一定存在最小值转折点(包括arr[ mid ]

2021-05-05 09:23:36 73

原创 2021-05-04 栈实现队列

栈实现队列一个作为入队栈(stack1),一个作为出队栈(stack2)入队:元素入stack1;出队:若stack2有元素:直接出栈stack2;若stack2无元素:stack1元素转入stack2 ,再出栈stack2;class Solution{public: void push(int node) { while(!stack2.empty()) { int data = stack2.top();

2021-05-05 09:10:38 42

原创 2021-5-3 二维数组中查找

题目 二维数组中查找在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。解4根据矩阵的特点,我们从矩阵的第一行最后一列(arr[ 0 ][ cols-1 ])的点出发,

2021-05-03 14:18:21 57

转载 2021-4-20 不同路径

题目 不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向下 -> 向下向下 -> 向下 -> 向右向下 ->

2021-04-20 11:28:30 46

原创 2021-4-19 最长回文子串

class Solution {public: string longestPalindrome(string s) { int count = 0; int max,begin,end,i,j; max = 0; begin = end = 1; int len = s.length(); if(len == 0 || len == 1) return s; vector&l

2021-04-19 15:07:07 47

原创 20210407 最长湍流子数组

题目 最长湍流子数组当 A 的子数组 A[i], A[i+1], …, A[j] 满足下列条件时,我们称其为湍流子数组:若 i <= k < j,当 k 为奇数时, A[k] > A[k+1],且当 k 为偶数时,A[k] < A[k+1];或 若 i <= k < j,当 k 为偶数时,A[k] > A[k+1] ,且当 k 为奇数时, A[k] < A[k+1]。也就是说,如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是湍流子数组。返

2021-04-07 20:04:03 67

原创 2021-04-05 求最长递增子序列

class Solution {public: int lengthOfLIS(vector<int>& nums) { vector<int> dp(nums.size() , 1); int Max = 1; for(int i=1 ; i<dp.size() ; i++) { for(int j=0 ; j<i ; j++) {

2021-04-06 18:08:43 49

原创 2021-04-04一和零

给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。示例 1:输入:strs = [“10”, “0001”, “111001”, “1”, “0”], m = 5, n = 3输出:4解释:最多有 5 个 0 和 3 个 1 的最大子集是 {“10”,“0001”,“1”,“0”} ,因此答案是 4 。其他满足题意但较

2021-04-05 09:13:00 130

原创 2021-04-02 判断子序列

class Solution {public: bool isSubsequence(string s, string t) { if(s == "") return true; if(t == "") return false; int i,j; i = j = 0; for(i = 0 ; i<t.length() ; i++) { if(t[i] == s[j])

2021-04-03 13:22:04 143

原创 20210323 买卖股票

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1

2021-03-23 20:02:07 173

原创 20210322 区域和检索 - 数组不可变

class NumArray {public: vector<int> nums;public: NumArray(vector<int>& nums) { this->nums = nums; } int sumRange(int left, int right) { if(left > right) return 0; if(left == right) return

2021-03-22 19:43:46 43

原创 2021-03-20 除数博弈

爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0 < x < N 且 N % x == 0 。用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 False。假设两个玩家都以最佳状态参与游戏。示例 1:输入:2输出:true解释:爱丽丝选择 1,鲍勃无法进行操作。示例 2:输入:3输出:fa

2021-03-20 17:27:07 45

原创 20210319 按摩师

题目 按摩师一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。示例 1:输入: [1,2,3,1]输出: 4解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。示例 2:输入: [2,7,9,3,1]输出: 12解释: 选择 1 号预约、 3 号预约和 5 号预约,总时长 = 2 + 9 + 1 = 12。示

2021-03-19 14:23:27 102

原创 2021-03-15 最大子序和

```cppclass Solution { int MAX = INT_MIN;public: int maxSubArray(vector<int>& nums) { for(int i=0 ; i<nums.size() ; i++) getSolution(nums , i); return MAX; } void getSolution(vector<int>&amp.

2021-03-15 23:38:00 49

原创 2021-03-12 两数相加

class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { Add(l1,l2,NULL,0); return l1; } void Add(ListNode* p1,ListNode* p2,ListNode* p , int c) { ListNode* pNode; if(!p1 &&amp

2021-03-14 11:34:02 79

原创 2021-03-09 具有所有最深节点的最小子树

题目 具有所有最深节点的最小子树给定一个根为 root 的二叉树,每个节点的深度是 该节点到根的最短距离 。如果一个节点在 整个树 的任意节点之间具有最大的深度,则该节点是 最深的 。一个节点的 子树 是该节点加上它的所有后代的集合。返回能满足 以该节点为根的子树中包含所有最深的节点 这一条件的具有最大深度的节点。示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4]输出:[2,7,4]解释:我们返回值为 2 的节点,在图中用黄色标记。在图中用蓝色标记

2021-03-09 19:35:39 132

原创 2021-03-05 划分为k个相等的子集

题目 划分为k个相等的子集给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。示例 1:输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4输出: True说明: 有可能将其分成 4 个子集(5),(1,4),(2,3),(2,3)等于总和。class Solution {public: bool canPartitionKSubsets(vector<int>& nums, int

2021-03-05 17:00:20 314

原创 2021-03-03 所有可能的满二叉树

题目 所有可能的满二叉树满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。返回包含 N 个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。答案中每个树的每个结点都必须有 node.val=0。你可以按任何顺序返回树的最终列表。示例:输入:7输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,null,null,null,nul

2021-03-04 11:40:27 98 1

原创 2020-03-01 两两交换链表中的节点

class Solution {public: ListNode* swapPairs(ListNode* head) { if(!head) return head; return getSolution(head->next , head); } ListNode* getSolution(ListNode* pNode , ListNode* pLast) { if(!pNode) return pLast;

2021-03-02 14:46:13 39

原创 2021-02-25 递归乘法

题目 递归乘法写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。示例1:输入:A = 1, B = 10输出:10示例2:输入:A = 3, B = 4输出:12通过对两个数进行位运算,以3*4为例子按照传统的乘法的累加方式,从左向右判断B的每一位。如果为该位0,则加0;如果为1,则加A,然后左移一位,处理B的下一位。class Solution {public: int multiply(int A, int B) {

2021-02-25 14:43:42 336

原创 2021-02-24 找出克隆二叉树中的相同节点

题目 找出克隆二叉树中的相同节点给你两棵二叉树,原始树 original 和克隆树 cloned,以及一个位于原始树 original 中的目标节点 target。其中,克隆树 cloned 是原始树 original 的一个 副本 。请找出在树 cloned 中,与 target 相同 的节点,并返回对该节点的引用示例 1:输入: tree = [7,4,3,null,null,6,19], target = 3输出: 3(黄色结点3的引用)解释: 上图画出了树 original 和 cl

2021-02-24 14:30:53 90

原创 2021-02-23 连续差相同的数字

题目 连续差相同的数字返回所有长度为 n 且满足其每两个连续位上的数字之间的差的绝对值为 k 的 非负整数 。请注意,除了 数字 0 本身之外,答案中的每个数字都 不能 有前导零。例如,01 有一个前导零,所以是无效的;但 0 是有效的。你可以按 任何顺序 返回答案。示例 1:输入:n = 3, k = 7输出:[181,292,707,818,929]解释:注意,070 不是一个有效的数字,因为它有前导零。示例 2:输入:n = 2, k = 1输出:[10,12,21,23,32,3

2021-02-23 17:35:57 306

原创 2021-02-22 跳跃游戏

题目 跳跃游戏这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。请你判断自己是否能够跳到对应元素值为 0 的 任一 下标处。注意,不管是什么情况下,你都无法跳到数组之外。示例 1:输入:arr = [4,2,3,0,3,1,2], start = 5输出:true解释:到达值为 0 的下标 3 有以下可能方案:下标 5 -> 下标 4 -> 下标 1 -> 下

2021-02-22 21:37:23 49

原创 2021-02-21 验证二叉搜索树

题目 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。解1 中序遍历由于二叉搜索树的中序遍历一定是一个升序的数组,因此中序遍历二叉树,并通过设置一个全局变量pNode记录遍历到的每个结点的上一个结点,如果pNode值 >= root的值,则说明不是二叉搜索树。另外,在设置一个全局变量flag,判断遍历过程种是否右上述所说情

2021-02-21 17:39:48 54

原创 2021-02-20 最长同值路径

class Solution { int L = 0;public: int longestUnivaluePath(TreeNode* root) { if(root == NULL) return 0; int length=0; getLongest(root,root->val); return L-1; } int getLongest(TreeNode* root , int nVal)

2021-02-21 11:43:09 66

原创 2021-2-19 构建字典序最大的可行序列 二叉树的右视图

给你一个整数 n ,请你找到满足下面条件的一个序列:整数 1 在序列中只出现一次。2 到 n 之间每个整数都恰好出现两次。对于每个 2 到 n 之间的整数 i ,两个 i 之间出现的距离恰好为 i 。序列里面两个数 a[i] 和 a[j] 之间的 距离 ,我们定义为它们下标绝对值之差 |j - i| 。请你返回满足上述条件中 字典序最大 的序列。题目保证在给定限制条件下,一定存在解。一个序列 a 被认为比序列 b (两者长度相同)字典序更大的条件是: a 和 b 中第一个不一样的数字处,a 序列

2021-02-19 15:36:15 225

原创 2021-02-13 二叉树累加和 修剪二叉搜索树

题目 把二叉搜索树转换为累加树给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。示例 1:输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]...

2021-02-13 14:03:12 174

原创 2021-02-08 数值的整数次方

题目 数值的整数次方实现函数double Power(double base, int exponent),求base的exponent次方示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100解1 循环快速幂法的二进制角度:class Solution {public: double myPow(double x, long long n) { double res = 1;

2021-02-08 20:33:22 96

原创 2021-02-05 前序中序遍历生成树

题目 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例:前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7/** * Definition for a binary tree node. * struct TreeNode { * int val

2021-02-07 10:34:47 157

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除