- 博客(10)
- 收藏
- 关注
原创 OJ输入输出练习
1.读取几个整数,输出整数输入:包括两个正整数·a,b(1 <= a, b <= 10^9)·,输入数据包括多组。输出:输出·a+b·的结果示例输入1 510 20输出630代码要写完整的C++代码,不是像力扣里面那样只写一个函数,用scanf()读取输入(或者cin也可以?)#include<iostream>using namespace std;int main(){ int a=0,b=0; while(~scanf("%d %d
2021-05-27 00:31:47 246
原创 LeetCode——栈和队列
栈和队列622. 设计循环队列**思路:**代码622. 设计循环队列设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。思路:成员变量:队头指针head、当前队列中的元素数count、队列容量ca
2021-04-12 11:18:53 918
原创 LeetCode——图
图200. 岛屿数量方法一:深度优先搜索方法二:广度优先搜索200. 岛屿数量给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。方法一:深度优先搜索将二维网格看成一个无向图,竖直或水平相邻的1之间有边相连。扫描整个二维网格,遍历每个元素。如果该位置为1,就将它作为起始节点开始深度优先搜索,并将其置为0,然后考察该节点的上下左右结点,
2021-04-11 11:02:24 560
原创 LeetCode——其他
191. 位1的个数编写一个函数,输入是一个无符号整数n(以二进制串的形式),返回其二进制表达式中数字位数为 '1'的个数(也被称为汉明重量)。思路:输入是一个无符号整数的32位二进制串n循环32次,每次都将n与1进行位与运算(相当于比较n的最低位),可以查看当前n的最低位是不是1,是1的话计数器加一。每次循环都将n向右移一位。代码class Solution {public: int hammingWeight(uint32_t n) { int ret =
2021-04-03 22:08:48 301
原创 LeetCode——数学
204. 计数质数统计所有小于非负整数 n的质数的数量。思路:(来自官方题解)本题可以采用暴力枚举,挨个判断是否为质数,但是时间复杂度较高。枚举法没有考虑到数与数之间的关联性:如果x是质数,那么大于x的x的倍数2x,3x,…一定不是质数——埃氏筛算法用数组元素isPrime[i]表示数i是否为质数,是质数则为1,否则为0。从小到大遍历每个数,如果为质数(isPrime[i]==1),则将其所有的倍数都标记为合数(isPrime[i]=0)(除了该质数本身),即0。这种方法的正确性是比较显然
2021-03-29 11:23:08 155
原创 LeetCode——设计问题
384. 打乱数组给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。实现 Solution class:Solution(int[] nums) 使用整数数组 nums 初始化对象int[] reset() 重设数组到它的初始状态并返回int[] shuffle() 返回数组随机打乱后的结果思路关键是洗牌的操作通过交换数组元素来实现,遍历数组,每次遍历时生成一个随机数ind,然后交换当前元素nums[i]和以随机数为下标的数组元素nums[ind],来达到打乱数组的目的
2021-03-25 08:11:36 324
原创 LeetCode——动态规划
70. 爬楼梯假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?思路:一道经典的动态规划题目,由于每次可以爬一个或者两个台阶,因此可以将问题转化为最后一步是爬一阶还是爬两阶的问题。状态转移方程为:f(n)=f(n-1)+f(n-2)如果利用递归来求解的话会产生过多的重复计算,时间空间复杂度都很高,所以要从小到大地进行迭代求解,计算每一步的临时变量。我最初的算法是将每个中间变量都用数组存起来,然后挨个计算到f(n),但是这样的空
2021-03-20 11:47:01 303
原创 LeetCode——二叉树
98. 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。解法一 用一个数组存放经过中序遍历的结点值由于要求所有的左子树小于当前结点所有右子树大于当前结点,因此可以利用中序遍历,将二叉树线性化,得到一个序列,后面只需判断这个序列是否严格升序就好了(不能有相同元素)时间空间都是O(N)代码/** * Definition f
2021-03-14 10:32:12 872
原创 Leetcode——链表
2. 两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。**解题思路:**给定的两个链表,由于是逆序排列,从链表第一个结点开始是低位。设置一个进位标志,将两链表的结点值用sum依次相加,和大于等于十时需要进位。结果存在另一链表中。/** * Definition for singly-linked list.
2021-02-07 11:53:47 344
原创 Leetcode——数组和字符串
151.翻转字符串里的单词给定一个字符串,逐个翻转字符串中的每个单词。说明:无空格字符构成一个 单词 。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。提示:1 <= s.length <= 104s 包含英文大小写字母、数字和空格 ’ ’s 中 至少存在一个 单词思路:要原地进行翻转的话,就不能另外创建一个字符串来从后往前读取保存单词。可以先将字符串整个翻
2021-02-02 16:01:37 2477
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人