面试
落雨飞辰
no pains no gains
展开
-
leetcode 5532. 奇偶树
如果一棵二叉树满足下述几个条件,则可以称为奇偶树:二叉树根节点所在层下标为0,根的子节点所在层下标为1,根的孙节点所在层下标为2,依此类推。 偶数下标层上的所有节点的值都是奇整数,从左到右按顺序严格递增 奇数下标层上的所有节点的值都是偶整数,从左到右按顺序严格递减给你二叉树的根节点,如果二叉树为奇偶树,则返回true,否则返回false。思路:层次遍历/** * Definition for a binary tree node. * st...原创 2020-10-04 19:40:28 · 157 阅读 · 0 评论 -
leetcode 28. 实现 strStr()
实现strStr()函数。给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。思路:随心所欲的KMPclass Solution {public: int next[100001] = {0}; void getNext(string s, int len){ next[0] = next[1] = 0; int ...原创 2020-08-06 10:57:34 · 267 阅读 · 0 评论 -
leetcode 650. 只有两个键的键盘
最初在一个记事本上只有一个字符 'A'。你每次可以对这个记事本进行两种操作:Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。Paste (粘贴) : 你可以粘贴你上一次复制的字符。给定一个数字n。你需要使用最少的操作次数,在记事本中打印出恰好n个 'A'。输出能够打印出n个 'A' 的最少操作次数。思路:动态规划class Solution {public: int dp[10001]; int minSteps(...原创 2020-08-04 21:38:03 · 154 阅读 · 0 评论 -
leetcode 5477. 排布二进制网格的最少交换次数
给你一个nx n的二进制网格grid,每一次操作中,你可以选择网格的相邻两行进行交换。一个符合要求的网格需要满足主对角线以上的格子全部都是 0。请你返回使网格满足要求的最少操作次数,如果无法使网格符合要求,请你返回 -1。主对角线指的是从(1, 1)到(n, n)的这些格子。思路:先把格子压缩到一维数组(arr[i]表示第i行最右边连续0的个数),然后模拟即可class Solution {public: int arr[201] = {0}; ...原创 2020-08-04 20:27:29 · 146 阅读 · 0 评论 -
leetcode 16. 最接近的三数之和
给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。思路:双向指针class Solution {public: int threeSumClosest(vector<int>& nums, int target) { int ans = INT_MAX; int cnt = 0; sor...原创 2020-08-04 16:00:32 · 119 阅读 · 0 评论 -
leetcode 146. LRU缓存机制
运用你所掌握的数据结构,设计和实现一个LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。思路:unoedered..原创 2020-07-30 16:11:37 · 117 阅读 · 0 评论 -
leetcode 292. Nim 游戏
你和你的朋友,两个人一起玩Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。思路:如果n为4的倍数,那么我拿x块之后,对方只需要拿4-x,则我必输无疑。class Solution {public: bool canWinNim(int n) { return n%4; }};...原创 2020-07-29 08:25:58 · 188 阅读 · 0 评论 -
leetcode 5473. 灯泡开关 IV (阿里云周赛)
房间中有 n 个灯泡,编号从 0 到 n-1 ,自左向右排成一行。最开始的时候,所有的灯泡都是 关 着的。请你设法使得灯泡的开关状态和 target 描述的状态一致,其中 target[i] 等于 1 第 i 个灯泡是开着的,等于 0 意味着第 i 个灯是关着的。有一个开关可以用于翻转灯泡的状态,翻转操作定义如下:选择当前配置下的任意一个灯泡(下标为 i )翻转下标从 i 到 n-1 的每个灯泡翻转时,如果灯泡的状态为 0 就变为 1,为 1 就变为 0 。返回达成 target 描述的原创 2020-07-27 09:13:45 · 259 阅读 · 0 评论 -
leetcode 43. 字符串相乘
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。思路:模拟手算class Solution {public: string multiply(string num1, string num2) { if(num1[0] == '0' || num2[0] == '0') return "0"; int len1 = num1.size(), len2 = num2.size()...原创 2020-07-25 14:51:58 · 106 阅读 · 0 评论 -
leetcode 236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树:root =[3,5,1,6,2,0,8,null,null,7,4]思路:模拟题/** * Definition for a binary tree node. * struct TreeNode { * ...原创 2020-07-25 08:58:48 · 100 阅读 · 0 评论 -
leetcode 20. 有效的括号
给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串思路:考察数据结构 栈,左括号进栈,遇到匹配的就出栈;看是否最后栈里啥也不剩 或者 途中存在右括号压到栈底的情况,两者返回false直接。class Solution {public: bool isValid(string s) { if(s.size().原创 2020-07-24 08:54:03 · 246 阅读 · 0 评论 -
leetcode 142. 环形链表 II
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。时间复杂度O(n), 空降复杂度O(1);思路:设置两个快慢指针,一个步长为一(slow),一个步长为二(fast),相同起点,让其撒丫子跑,能再次碰面说明有环。如果有环让slow回头原点,fast在碰面的位置,同时步长地为一向前匍匐,则再次见面..原创 2020-07-23 15:58:35 · 105 阅读 · 0 评论 -
leetcode 587. 安装栅栏
在一个二维的花园中,有一些用 (x, y) 坐标表示的树。由于安装费用十分昂贵,你的任务是先用最短的绳子围起所有的树。只有当所有的树都被绳子包围时,花园才能围好栅栏。你需要找到正好位于栅栏边界上的树的坐标。思路:标准的凸包问题,这里使用了Andrew 算法代码:class Solution{public: struct node { int x,y; } a[1000005],b[1000005],ansV[1000005]; static原创 2020-07-22 19:12:37 · 201 阅读 · 0 评论 -
leetcode 61. 旋转链表
给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。思路:先连接成循环链表,再根据k转圈圈,最后斩断。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ...原创 2020-07-19 14:18:39 · 105 阅读 · 0 评论 -
最长全1串
题目:给你一个01串,定义答案=该串中最长的连续为1的长度,现在你有至多k次机会,每次机会可以将串中的某个0改成1,现在问最大可能答案。输入:输入第一行的两个整数N,k,表示字符串长度和机会次数第二行输入N个整数,表示该字符串的元素12输出输出一行表示答案1样例输入10 21 0 0 1 0 1 0 1 0 112样例输出5思路: 先记...原创 2020-02-25 16:30:35 · 882 阅读 · 0 评论 -
LeetCode-两数相加
直接上错误样例:[5][5][7,2][3,9][1][9,9][1][9,9,9,9]以下为ac代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) :...原创 2020-02-08 12:53:18 · 139 阅读 · 0 评论