
leetcode
huangyitai
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
腾讯精选练习:231. 2的幂(位运算,lowbit)
231. 2的幂给定一个整数,编写一个函数来判断它是否是 2 的幂次方。示例 1:输入: 1输出: true解释: 20 = 1示例 2:输入: 16输出: true解释: 24 = 16分析1如果是2的幂,那么取以2为底的log会得到一个整数精度要自己设定。class Solution {public: bool isPowerOfTwo(int n) { if(n<=0) return false; double lg = log原创 2020-05-24 21:41:27 · 272 阅读 · 0 评论 -
腾讯精选练习:142. 环形链表 II(数论同余,逻辑)
142. 环形链表 II给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2]原创 2020-05-24 12:40:12 · 227 阅读 · 0 评论 -
腾讯精选练习:16. 最接近的三数之和
16. 最接近的三数之和给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).分析这类题目一般都排个序,先固定一个数,然后用双指针去找另外数字。注意就是要遍历所有的数,作为被固定的那个数,这样才能枚举所有的原创 2020-05-23 21:57:09 · 185 阅读 · 0 评论 -
腾讯精选练习:89. 格雷编码(找规律做位运算)
89. 格雷编码格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。格雷编码序列必须以 0 开头。示例 1:输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的 n,其格雷编码序列并不唯一。例如,[0,2,3,1] 也是一个有效的格雷编码序列。00 - 010 - 211 - 301 - 1示例 2:原创 2020-05-23 21:51:31 · 237 阅读 · 0 评论 -
腾讯面试精选:122. 买卖股票的最佳时机 II(贪心,逻辑题)
122. 买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候原创 2020-05-23 17:34:42 · 456 阅读 · 0 评论 -
腾讯精选练习:求数列的所有的子集(dfs,位运算 )
78. 子集给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]解法1用dfs去实现一种暴力求解。我们可以从左到右遍历数组nums,对于每一个数,我们只需要考虑将它加入已有的集合中,构成一个新的集合,还是让它单独作为一个集合。所以我们得出以下操作:遍历答案集合里面所有的子集,然后把原创 2020-05-23 17:03:11 · 467 阅读 · 0 评论 -
腾讯精选练习:LRU缓存机制(unordered_map+hash)
LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「密钥/数据值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。进阶:你是否可以原创 2020-05-18 15:34:21 · 175 阅读 · 0 评论 -
剑指offer:面试题65. 不用加减乘除做加法(位运算)
面试题65. 不用加减乘除做加法写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2提示:a, b 均可能是负数或 0结果不会溢出 32 位整数分两部分来求:1、没有进位的加法a ^ b二者异或仅仅是考虑了该位相加,不能处理进位2、求加法的进位((unsigned int)(a & b) << 1);二者相与的结果为1,说明该位会向前进位,左移 1 即可求得进位的原创 2020-05-11 10:35:48 · 213 阅读 · 0 评论 -
剑指offer:面试题53 - II. 0~n-1中缺失的数字(查找左边界)
面试题53 - II. 0~n-1中缺失的数字一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:(这个样例很特别)输入: [0,1,2]输出: 3class Solution {public: int missingNumber(vector<int>& nums) { if(!n原创 2020-05-10 21:54:21 · 121 阅读 · 0 评论 -
剑指offer:面试题53 - I. 在排序数组中查找数字 I
统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0限制:0 <= 数组长度 <= 50000排序里面查找数字,首先就想到是二分,查出现次数,显然是找左边界和右边界,模板题。class Solution {public: int search(vector<int>& nums原创 2020-05-10 21:14:56 · 284 阅读 · 0 评论 -
剑指offer:面试题52. 两个链表的第一个公共节点
面试题52. 两个链表的第一个公共节点输入两个链表,找出它们的第一个公共节点。我的做法是先分别算出两个链表的长度,记长度的差值是dis,然后让长的链表先走dis步,然后再两个一起走。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */cl原创 2020-05-10 20:37:20 · 189 阅读 · 0 评论 -
剑指offer:面试题46 把数字翻译成字符串
面试题46 把数字翻译成字符串给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”提示:0≤num<2310 \leq num < 2^{31}0≤nu原创 2020-05-10 02:35:18 · 443 阅读 · 0 评论 -
剑指offer:面试题45 把数组排成最小的数
面试题45 把数组排成最小的数输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: “102”示例 2:输入: [3,30,34,5,9]输出: “3033459”排个序就可以了。class Solution {public: static int cmp(int a, int b){ string sab = to_string(a) + to_string(b); st原创 2020-05-09 23:55:06 · 284 阅读 · 0 评论 -
剑指offer:面试题44 数字序列中某一位的数字
面试题44 数字序列中某一位的数字数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。示例 1:输入:n = 3输出:3示例 2:输入:n = 11输出:0限制:0 <= n < 2^31分析这道题下标从0开始,第一个0是占下标0用的,不必考虑。主要是考虑了一位数(1-9)占了9位,两位数(10-99)占了180位,以此类推原创 2020-05-09 22:52:16 · 154 阅读 · 0 评论 -
剑指offer:面试题47 礼物的最大价值(一维DP)
面试题47 礼物的最大价值在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?class Solution {public: int dp[205]; int maxValue(vector<vector<int>>& grid) { int m =原创 2020-05-09 17:15:57 · 131 阅读 · 0 评论 -
剑指offer:面试题43 1~n整数中1出现的次数(数位DP)
面试题43. 1~n整数中1出现的次数这道题我很喜欢,有用的知识增加了。首先明确这道题可以用数位DP来做:先上一个数位DP模板:#include <bits/stdc++.h>using namespace std;//问:在区间[a,b]中不含49的数字有多少个int a, b, shu[20], dp[20][2]; //shu数组存储各位上的数 dp[i][1] 表示第i+1位为4,剩余数字长度为i的数字的个数//dp[i][0] 意思第i+1原创 2020-05-09 17:13:54 · 286 阅读 · 0 评论 -
剑指offer:面试题48 最长不含重复字符的子字符串
面试题48 最长不含重复字符的子字符串请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。显然是滑动窗口class Solution {public: int vis[300]; int lengthOfLongestSubstring(string s) { int cnt = 0; int max = 0; int startPos = 0; for(int i=0; i<300; i原创 2020-05-08 23:05:47 · 236 阅读 · 0 评论 -
剑指offer:面试题40 最小的k个数
面试题40 最小的k个数输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]分析这是一道非常经典的题目,有三种做法:1、直接sort排序取前K大2、堆排序3、快排思想第一种解法太无聊不说了2、堆排序堆就是根节点大于孩子结点,兄弟结点不区原创 2020-05-08 21:01:09 · 149 阅读 · 0 评论 -
剑指offer:面试题36 二叉搜索树与双向链表
二叉搜索树与双向链表输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。leetcode真的狗,一份好好的代码交了十几次过不了,去牛客网一次就过了,呸呸呸。#include<bits/stdc++.h>using namespace std;// Definition for a TreeNode.class...原创 2020-05-08 15:37:34 · 366 阅读 · 0 评论 -
剑指offer:面试题39 数组中出现次数超过一半的数字(摩尔投票法)
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2解题思路:本题常见解法如下:哈希表统计法: 遍历数组 nums ,用 HashMap 统计各数字的数量,最终超过数组长度一半的数字则为众数。此方法时间和空间复杂度均为 O(N) 。数...原创 2020-04-30 02:25:01 · 267 阅读 · 0 评论 -
剑指offer:面试题35 复杂链表的复制
面试题35 复杂链表的复制请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1...原创 2020-04-30 00:34:07 · 327 阅读 · 1 评论 -
剑指offer:面试题 逐行打印n * n回型矩阵
逐行打印n * n回型矩阵( 不可以在内存填好整个矩阵然后再打印)样例:n=31 2 38 9 47 6 5n=41 2 3 412 13 14 511 16 15 610 9 8 7分析做这个题目就是一个找规律的过程#include<bits/stdc++.h>using namespace std;int findBegin(int cycle, i...原创 2020-04-28 16:59:04 · 936 阅读 · 0 评论 -
剑指offer:面试题29 顺时针打印矩阵
面试题29 顺时针打印矩阵输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制...原创 2020-04-28 16:45:13 · 104 阅读 · 0 评论 -
剑指offer:面试题30 包含min函数的栈(单调栈)
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -...原创 2020-04-28 13:49:08 · 190 阅读 · 0 评论 -
leetcode:739.每日温度(线性表)
739.每日温度(线性表)根据每日气温列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 300...原创 2020-04-22 14:08:35 · 248 阅读 · 0 评论