OJ题目
之前刷过一些Leetcode并记录,如今应聘在即,刷一些牛客网题目并记录
Nayido
这个作者很懒,什么都没留下…
展开
-
NC20 数字字符串转化成IP地址
描述现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。例如:给出的字符串为"25525522135",返回["255.255.22.135", "255.255.221.35"]. (顺序没有关系)示例1输入:"25525522135"返回值:["255.255.22.135","255.255.221.35"]我用深搜解的C++ Vector 传参, 函数处带&才是穿实参。class Solution {p原创 2021-09-08 16:03:31 · 310 阅读 · 0 评论 -
NC8 二叉树根节点到叶子节点和为指定值的路径
描述给定一个二叉树和一个值sum\ sumsum,请找出所有的根节点到叶子节点的节点值之和等于sum\ sumsum 的路径,例如:给出如下的二叉树,sum=22\ sum=22sum=22,返回[[5,4,11,2],[5,8,9]]示例1输入:{1,2},1返回值:[]示例2输入:{1,2},3返回值:[[1,2]]是我比较擅长的深搜题/** * struct TreeNode { * int val;...原创 2021-09-03 19:32:23 · 109 阅读 · 0 评论 -
NC7 买卖股票的最好时机
描述假设你有一个数组,其中第i\ ii 个元素是股票在第i\ ii 天的价格。你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。示例1输入:[1,4,2]返回值:3示例2输入:[2,4,1]返回值:2这个题是简单题,可以暴力解决。不过其实优化解法也挺有意思的。第一遍循环计算 prices[i] - prices[i-1]并存储于money第二遍循环计算 money的累加值,有点像寻...原创 2021-09-03 19:24:55 · 123 阅读 · 0 评论 -
NC6 二叉树的最大路径和
描述给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。这个路径的开始节点和结束节点可以是二叉树中的任意节点例如:给出以下的二叉树,返回的结果为6示例1输入:{-2,1}返回值:1示例2输入:{-2,#,-3}返回值:-2定义一个中间变量:节点最大贡献值 = node->val + max(left_num + right_num);表示如果该节点不为根节点时,走过该节点的路径能获得的最大贡献值。经过节点A.原创 2021-09-03 19:10:49 · 138 阅读 · 0 评论 -
NC119 最小的K个数
描述给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。0 <= k <= input.length <= 10000 0 <= input[i]<= 10000示例1输入:[4,5,1,6,2,7,3,8],4 返回值:[1,2,3,4]说明:返回最小的4个数即可,返回[1,3,2,4]也可以 学习了堆排序C++中 priority_que..原创 2021-09-02 19:58:37 · 74 阅读 · 0 评论 -
NC102 在二叉树中找到两个节点的最近公共祖先
描述给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1和o2,请找到 o1和o2的最近公共祖先节点。注:本题保证二叉树中每个节点的val值均不相同。示例1输入:[3,5,1,6,2,0,8,#,#,7,4],5,1返回值:3采用递归的做法函数DFS返回值为结果。如果o1与o2分别在root的左右子树,则root为答案。如果o1与o2都在root的左子树,则递归调用左子树。右子树也是如此。/** * struct TreeN...原创 2021-09-02 19:41:52 · 63 阅读 · 0 评论 -
NC3 链表中环的入口结点
描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台将这2个会组装成一个有环或者无环单链表返回值描述:返回链表的环的入口结点即可。而我们后台程序会打印这个节点示例1输入:{1,2},{3,4,5}复制返回值:3复制说明:返回环形链表入口节点,我们后台会打印该环形链表入口节点,即3 示例2输入:{1},{}复制返回值:"n转载 2021-08-26 20:16:31 · 121 阅读 · 0 评论 -
NC2 重排链表
描述将给定的单链表\ LL:L_0→L_1→…→L_{n-1}→L_ nL0→L1→…→Ln−1→Ln重新排序为:L_0→L_n →L_1→L_{n-1}→L_2→L_{n-2}→…L0→Ln→L1→Ln−1→L2→Ln−2→…要求使用原地算法,不能只改变节点内部的值,需要对实际的节点进行交换。示例1输入:{1,2,3,4}复制返回值:{1,4,2,3}复制说明:给定head链表1->2->3->4, 重新排列为 1...原创 2021-08-26 20:05:49 · 137 阅读 · 0 评论 -
NC1 大数加法
描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。(字符串长度不大于100000,保证字符串仅由'0'~'9'这10种字符组成)示例1输入:"1","99"复制返回值:"100"复制说明:1+99=100 class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字原创 2021-08-26 19:23:10 · 90 阅读 · 0 评论 -
NC97 字符串出现次数的TopK问题
描述给定一个字符串数组,再给定整数k,请返回出现次数前k名的字符串和对应的次数。返回的答案应该按字符串出现频率由高到低排序。如果不同的字符串有相同出现频率,按字典序排序。对于两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。比如"ah1x"小于"ahb","231"<”32“字符仅包含数字和字母[要求]如果字符串数组长度为N,时间复杂度请达到O(N \log K)O(NlogK)示例1输入:["a","b","c"原创 2021-08-06 15:54:31 · 120 阅读 · 0 评论 -
NC91 最长递增子序列
描述给定数组arr,设长度为n,输出arr的最长递增子序列。(如果有多个答案,请输出其中 按数值(注:区别于按单个字符的ASCII码值)进行比较的 字典序最小的那个)示例1输入:[2,1,5,3,6,4,8,9,7]复制返回值:[1,3,4,8,9]复制示例2输入:[1,2,8,6,4]复制返回值:[1,2,4]复制说明:其最长递增子序列有3个,(1,2,8)、(1,2,6)、(1,2,4)其中第三个 按数值进行比较的字典序 最小,故答案原创 2021-08-04 17:29:57 · 478 阅读 · 0 评论 -
NC59 矩阵的最小路径和
描述给定一个n * m的矩阵a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。示例1输入:[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]复制返回值:12复制备注:1 \leq n,m \leq 20001≤n,m≤20001 \leq arr_{i,j} \leq 1001≤arri,j≤100## # @param mat...原创 2021-08-02 17:50:58 · 140 阅读 · 0 评论 -
NC13 二叉树的最大深度
描述求给定二叉树的最大深度,最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。示例1输入:{1,2}复制返回值:2复制示例2输入:{1,2,3,4,#,#,5}复制返回值:3# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None#原创 2021-08-02 16:59:07 · 83 阅读 · 0 评论 -
NC109 岛屿数量
描述给一个01矩阵,1代表是陆地,0代表海洋,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。示例1输入:[[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]]复制返回值:3复制备注:01矩阵范围<=200*200## 判断岛屿数量# @param grid char字符型二维数组 # @.原创 2021-08-02 16:36:47 · 142 阅读 · 0 评论 -
NC14 按之字形顺序打印二叉树
描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树之字形层序遍历的结果是[[1],[3,2],[4,5]]示例1输入:{1,2,3,#,#,4,5}复制返回值:[[1],[3,2],[4,5]]复制示例2输入:{8,6,10,5,7,9,11}复制返回值:[[8],[10,6],[5,7,9,11]]复制示例3原创 2021-08-02 08:22:23 · 197 阅读 · 0 评论 -
NC136 输出二叉树的右视图
描述请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图示例1输入:[1,2,4,5,3],[4,2,5,1,3]复制返回值:[1,3,5]复制备注:二叉树每个节点的值在区间[1,10000]内,且保证每个节点的值互不相同。## 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可# 求二叉树的右视图# @param xianxu int整型一维数组 先序遍历# @param zhongxu int整型一维数组 中序原创 2021-08-01 14:55:38 · 80 阅读 · 0 评论 -
NC128 接雨水问题
描述给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个柱子高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例1输入:[3,1,2,5,2,4] 返回值:5 说明:数组 [3,1,2,5,2,4] 表示柱子高度图,在这种情况下,可以接 5个单位的雨水,蓝色的为雨水 示例2输入:[4,5,1,3,2]返回值:2 这道题的重点是,不能只看局部的低谷,要看整体的低谷。我一开始直接找山谷区进行加和,后来发现自己错了。有原创 2021-07-16 19:56:56 · 291 阅读 · 2 评论 -
NC121 字符串的排列
描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。示例1输入:"ab"返回值:["ab","ba"]深搜+list去重转set再转list会乱序# -*- coding:utf-8 -*-flag = []result = []def原创 2021-07-13 19:13:12 · 113 阅读 · 0 评论 -
NC17 最长回文子串
描述对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。给定字符串A以及它的长度n,请返回最长回文子串的长度。示例1输入:"abc1234321ab",12返回值:7用的中心扩散法# -*- coding:utf-8 -*-def PalindromeLen(left, right, str, n): while left >= 0 and right < n and str[left] == str[right]:原创 2021-07-13 18:45:54 · 88 阅读 · 0 评论 -
NC40 两个链表生成相加链表
描述假设链表中每一个节点的值都在 0 - 9之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。例如:链表 1为 9->3->7,链表 2为 6->3,最后生成新的结果链表为 1->0->0->0。示例1输入:[9,3,7],[6,3]返回值:{1,0,0,0}备注:1≤n,m≤1061 \leq n, m \leq 10^61≤n,m≤1060≤ai,bi≤90 \leq a...原创 2021-07-09 20:07:50 · 126 阅读 · 0 评论 -
NC66 两个链表的第一个公共结点
描述输入两个无环的单链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)示例1输入:{1,2,3},{4,5},{6,7}返回值:{6,7}说明:第一个参数{1,2,3}代表是第一个链表非公共部分,第二个参数{4,5}代表是第二个链表非公共部分,最后的{6,7}表示的是2个链表的公共部分这3个参数最后在后台会组装成为2个两个无环的单链表,且是有公共节点的 我用set解决了。#原创 2021-07-09 19:41:06 · 123 阅读 · 0 评论 -
NC52 括号序列
描述给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。示例1输入:"["返回值:false示例2输入:"[]"返回值:true栈操作## # @param s string字符串 # @return bool布尔型#stack = []def match(c1 ,原创 2021-07-08 20:41:20 · 337 阅读 · 0 评论 -
NC14 二叉树的之字形层序遍历
描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)例如:给定的二叉树是{3,9,20,#,#,15,7},该二叉树之字形层序遍历的结果是[[3],[20,9],[15,7]]示例1输入:{1,#,2}返回值:[[1],[2]]深搜,python定义二维数组好麻烦# class TreeNode:# def __init__(self, x):# self.val.原创 2021-07-08 20:40:39 · 132 阅读 · 0 评论 -
NC41 最长无重复子数组
描述给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组示例1输入:[2,3,4,5]返回值:4说明:[2,3,4,5]是最长子数组 示例2输入:[2,2,3,4,3]返回值:3说明:[2,3,4]是最长子数组 示例3输入:[9]返回值:1示例原创 2021-07-08 20:13:52 · 182 阅读 · 0 评论 -
NC19 子数组的最大累加和问题
描述给定一个数组arr,返回子数组的最大累加和例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.题目保证没有全为负数的数据[要求]时间复杂度为O(n)O(n)O(n),空间复杂度为O(1)O(1)O(1)示例1输入:[1, -2, 3, 5, -2, 6, -1]返回值:12备注:1≤N≤1051 \leq N \leq 10^51≤N≤105∣arr原创 2021-07-06 18:07:57 · 143 阅读 · 0 评论 -
NC68 跳台阶
描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。示例1输入:2返回值:2示例2输入:7返回值:21菲波那契数列,直接递归跑居然超时,不得不用记忆化递归。python的字典跑记忆化递归还挺方便序号 函数及描述 1 dict.clear() 删除字典内所有元素 2 dict.copy() 返回一个字典的浅复制 3 dict.fr原创 2021-07-06 18:06:40 · 167 阅读 · 0 评论 -
NC33 合并有序链表
描述将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的,且合并后新链表依然有序。示例1输入:{1},{2}返回值:{1,2}示例2输入:{2},{1}返回值:{1,2}# class ListNode:# def __init__(self, x):# self.val = x# self.next = None## # @param l1 ListNode类原创 2021-07-06 17:17:22 · 177 阅读 · 0 评论 -
NC61 两数之和
描述给出一个整数数组,请在数组中找出两个加起来等于目标值的数,你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的假设给出的数组中只存在唯一解例如:给出的数组为 {20, 70, 110, 150},目标值为90输出 index1=1, index2=2示例1输入:[3,2,4],6返回值:[2,3]说明:因为 2+4=6 ,而 2的下标为2 , 4的原创 2021-07-06 17:03:41 · 96 阅读 · 0 评论 -
NC88 寻找第K大
描述有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(1<=K<=n),请返回第K大的数(包括重复的元素,不用去重),保证答案存在。示例1输入:[1,3,5,2,2],5,3返回值:2示例2输入:[10,10,9,9,8,7,5,6,4,3,4,2],12,3返回值:9说明:去重后的第3大是8,但本题要求包含重复的元素,不用去重,所以输出9 复习快排,直接拿原创 2021-07-05 20:10:19 · 130 阅读 · 0 评论 -
NC45 二叉树先序、中序、后序遍历
描述分别按照二叉树先序,中序和后序打印所有的节点。示例1输入:{1,2,3}返回值:[[1,2,3],[2,1,3],[2,3,1]]备注:n≤106n \leq 10^6n≤106复习了一下树的遍历,简单的递归。发现Python3函数自调用不能放在class里,不知道是不是我的理解有问题。树的遍历:preOrder:根左右inOrder:左根右postOrder:左右根# class TreeNode:# def __ini.原创 2021-07-05 19:10:17 · 182 阅读 · 0 评论 -
NC78+NC93
NC78 反转列表描述输入一个链表,反转链表后,输出新链表的表头。示例1输入:{1,2,3}返回值:{3,2,1}是一道简单题,主要考察链表。class Solution: # 返回ListNode def ReverseList(self, pHead): # write code here if not pHead: return None root = None .原创 2021-07-01 20:42:50 · 122 阅读 · 0 评论 -
[LeetCode] 3.Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters.Examples:Given "abcabcbb", the answer is "abc", which the length is 3.Given "bbbbb", the answer is "b", with the l...原创 2018-03-17 20:07:58 · 115 阅读 · 0 评论 -
[LeetCode] 5. Longest Palindromic Substring
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.Example:Input: "babad"Output: "bab"Note: "aba" is also a valid answer. Example:I...原创 2018-03-19 20:37:16 · 122 阅读 · 0 评论 -
[LeetCode] 6. ZigZag Conversion
自己A了,用的模拟,以下贴代码;一个注意点是numRows == 1的时候,害我wrong了一次class Solution{ public String convert(String s, int numRows) { if (numRows <= 1) return s; int up_or_down = 1; int line =...原创 2018-03-20 21:08:16 · 110 阅读 · 0 评论 -
[LeetCode] 13. Roman to Integer
Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999.class Solution { private int getThousands(String string){ return string.length()*1...原创 2018-03-30 15:25:16 · 104 阅读 · 0 评论 -
[LeetCode] 7.Reverse Integer
有个小坑,输入X为Int类型返回时可能大于Int_Max,所以写的时候要先用Long来作为result,如果大于则返回0,否则强制类型转换后返回;class Solution{ public int reverse(int x) { int flag = 1; long result = 0; if (x < 0) { ...原创 2018-03-25 17:00:49 · 108 阅读 · 0 评论 -
[LeetCode] 8.String to Integer (atoi)
一开始想用正则表达式做,后来发现不用正则表达式更简单;本题是简单模拟;题目大意就是给一个字符串,转化为int类型返回;字符串可能以空字符开头,然后加上‘+’/‘-’或者直接数字,如果数字大于Max_Int或小于Min_Int则返回Max_Int或Min_Int字符数字部分后可能有各种字符,忽略即可;若字符串全为空之类的,或格式错误无法解析,返回0;注意点:数字可能大到超过Long类型+-2返回的是...原创 2018-03-26 19:16:44 · 140 阅读 · 0 评论 -
[LeetCode] 9. Palindrome Number
简单题一次Aclass Solution { public boolean isPalindrome(int x) { String num = String.valueOf(x); String reverse_num = ""; int length = num.length(); for (int i = length-...原创 2018-03-27 19:57:32 · 108 阅读 · 0 评论 -
[LeetCode] 11. Container With Most Water
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two ...原创 2018-03-28 21:35:27 · 107 阅读 · 0 评论 -
[LeetCode] 12. Integer to Roman
Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.枚举。。class Solution { private String getThousand(int thousands){ switch (thousands)...原创 2018-03-29 16:17:47 · 185 阅读 · 0 评论