
Leetcode问题总结
文章平均质量分 59
谢蟹蟹猴啊
这个作者很懒,什么都没留下…
展开
-
Java哈希表小结
class Solution { public int lengthOfLongestSubstring(String s) { HashMap<Character, Integer> window = new HashMap<Character, Integer>(); int left = 0,right=0; int res=0; while(right<s.length()){原创 2021-11-29 19:39:44 · 267 阅读 · 0 评论 -
面试222222
面试题库2==判断括号是否合法 ()(()() || (()()) || ())() ||()() ====旋转数组--二分法扩展!---整数数组 nums 按升序排列,数组中的值 互不相同,把数组尾部一部分旋转到前面,然后在数组中搜索target的下标 [4,5,6,7,0,1,2], target = 0 输出5 ====经典二分查找--在排序数组中查找数组的前后索引,或者出现次数 5 7 7 8 8 10 target=8 输出2 ====跳跃游戏====下一个排列====两两交换链表中的节点=原创 2021-09-16 21:17:12 · 355 阅读 · 0 评论 -
每次面试前必看笔试题汇总~~~~~~~~~~~~~~~~~~~~~~~~~
题目1:判断链表是否有环#include<bits/stdc++.h>using namespace std;struct ListNode{ int val; ListNode* next; ListNode():val(0),next(nullptr){} ListNode(int x):val(x),next(nullptr){}}; //写个类class Solution{public: /*bool hasCycle(ListNode* head){ i原创 2021-08-21 20:39:38 · 305 阅读 · 0 评论 -
一个简单的例子:自己写类和结构体实现链表反转~ + 相交链表
有的时候面试为了节约时间问下面试官是否可以写主函数。但是为了不亏,可以写完结构体和class,然后有时间可以继续下面的main函数完成输入~~所以我们以后涉及到链表题目,只需要写模块1 和模块2即可,后面的main看情况。//自己定义结构体实现反转链表 #include<bits/stdc++.h>using namespace std;struct ListNode{ int val; ListNode* next; ListNode():val(0),next(nullpt原创 2021-08-17 19:25:06 · 176 阅读 · 0 评论 -
美团8.15 笔试复盘
第一题:第一行T表示有T组来判断,第二行是这个第一组的元素个数,接着是元素的全部输出,,,,不断输出T组输出是对每一组的判断,如果能排列组成1-2 -3这样的话输出yes不然输出NO#include<bits/stdc++.h>using namespace std;int main(){ int T; cin>>T; vector<vector<int>>res; for(int i=0;i<T;i++){原创 2021-08-15 18:29:16 · 304 阅读 · 1 评论 -
阿里+贝壳+荣耀笔试复盘
阿里第一题:输入一个编号 n代表数中中元素个数,第二行输入若干个整数,代表数组中的元素在一行中输出一个编号,代表在这个元素后分割可以使得两个数组的权重的乘积最大。如果有多个最佳答案,任意输出一个即可。输入31 2 3输出2思路:两个数加起来固定,在变化过程中求乘积最大,则x+y=m,我们求 2xy=m2-x2-y2,求xy的最大值就是求x2+y2的最小值。x2+y2=2x2-2mx+m2 ,当且仅当x=m/2的时候,x2+y2最小。这给我们启示,我们划分数组的时候两侧元素之和越接原创 2021-08-14 10:48:08 · 897 阅读 · 0 评论 -
科大迅飞笔试1
题目:输入一行数长度是N,然后有m行个锦囊可以改变这个数组,每个锦囊有2个元素,第一个元素是最多可以改变x个元素,第二个元素是可以改成xx这样得值。计算怎们使用锦囊让这组数改变后和最大如:5 31 2 3 4 51 54 43 3输出22#include<bits/stdc++.h>using namespace std;bool cmp(vector<int>a,vector<int>b){ return a[1]>b[1];}int原创 2021-08-01 09:38:40 · 117 阅读 · 0 评论 -
1.活动安排。计算可参加的最大活动数
题目: 有个叫做“嘻哈华”的同学,他所在的学校将举办一次活动,现在他想知道一个教室最多能安排的活动数?现在告诉他活动开始时间与结束时间,问:最多活动数?思路: 这个时间可以是数字,也可以是字符串形式如“11:25”或者“03:21”,注意到我们可以用sort对字符串进行排序,只要他们是长度相同的,尽管中间有:但是都有那就相同不会影响的!!!所以遇到这种输入不要慌!直接排序 这个题目的思路就是贪心原则,自定义排序规则对时间的结尾进行排序,结尾越靠近前面就排序到前面,就是对结尾从小到大排序。贯彻贪原创 2021-07-31 10:43:21 · 639 阅读 · 0 评论 -
面试题31:栈的压入和弹出序列,根据栈的压入和弹出序列来判断是他们是不是正确的!!!
思路: 这道题感觉在面试中很容易被问到,因为的确感觉不是非常难。可以用模拟的思路来写。就是遍历压入序列不断压入栈,一旦栈非空且与弹出序列相同就进行压出,然后知道序列不同了,说明要进新元素了,或者全部消耗了;如果压入和弹出步对等,最终的结果就是栈非空!!!class Solution {public: bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {原创 2021-07-30 16:12:08 · 69 阅读 · 0 评论 -
常规快速幂的写法!!!!!!!!!!!!!!!!!!!!!1
class Solution { public double myPow(double x, int n) { if(n==0) return 1; long N=n; //防止负数最大反转出错 if(N<0){ x=1/x; N=-N; } double result=1; while(N>0){ if(N%2==原创 2021-07-29 11:33:04 · 85 阅读 · 0 评论 -
275. H 指数 II
class Solution {public: int hIndex(vector<int>& citations) { int n=citations.size(); int l=0,r=n; int count=0; while(l<r){ int mid=(l+r+1)/2; count=0; for(auto x:citatio.原创 2021-07-12 10:03:05 · 85 阅读 · 0 评论 -
面试题 17.10. 主要元素 ---哈希表and摩尔排序!!
题目: 数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。 思路1: 最朴素的想法是用哈希表遍历数组的同时来记录增加个数,然后判断对应哈希表元素的个数是不是超过数组长度一半,如果超过了就返回这个数字。否则返回1.但是这样的时间复杂度就是o(N)了。而且不用担心少解,超过一半最多一种可能。class Solution {public: int majorityEle原创 2021-07-09 12:00:01 · 343 阅读 · 5 评论 -
自己写链表结构体和二叉树
上次商汤科技面试问到删除链表倒数第N个节点的题目,题目本身不难,但是需要自己写链表的输入,结构体创建等,下面附上两种方法,其实是一样的哈哈,细微区别,考虑到了链表可能输入长度是0的情况!val赋值和链表创建分开://删除倒数第N个链表j节点自己写// head->next=new Listnode();这样是不行的,因为next是空节点,没有资格进行操作,因为没有val #include<bits/stdc++.h>using namespace std;struct List原创 2021-07-08 14:01:32 · 127 阅读 · 0 评论 -
牛客企业真题刷题记录
备注: 一定要注意到,如果不是long long就会出错,这是由于代码:#include<bits/stdc++.h>using namespace std;bool is_prime(long long n){ if(n==2||n==3) return true; if(n%2==0 && n!=2) return false; for(int i=3;i<=(int)sqrt(n);i=i+2){.原创 2021-06-21 16:46:04 · 191 阅读 · 0 评论 -
牛客输入输出
题目1: 输入第一行表示几个行,接下来每行2个数字,输出累加#include<iostream>using namespace std;int main(){ int n,a,b; cin>>n; for(int i=0;i<n;i++) { cin>>a>>b; cout<<a+b<<endl; } return 0;}原创 2021-06-21 11:06:11 · 504 阅读 · 0 评论 -
Leetcode周赛,2021.6.20
思路: 对字符串的题目不是很敏感,涉及到数字和字符一起输出,刚看到题目有点懵,甚至想用二进制,或者数字转字符,字符转数字,试了好几个程序。纯数字的转换会超出边界!一开始的思路是将字符转换为数字,从头到尾遍历这个数字如果是奇数那就取这个奇数到他最开头的数字作为最大值。每次遇到奇数比较。 最后边界超了,之前还想着,字符串长度最长是最大的,如果长度一样比较最前面的数字谁最大。。。呵呵,最后想到,这题目说白了,因为开头不是0,说白了不就是从字符串尾巴开始找起,找到第一个是奇数的地方,然后截取从开头到第一个.原创 2021-06-20 12:11:28 · 123 阅读 · 0 评论 -
贪心算法之跳跃游戏~~~
Leetcode55:跳跃游戏题目: 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。思路: 利用贪心法则,从后往前找最先能够跳到终点的位置。贪心没错,因为这个问题是个累计问题,一旦能跳到这么前面到终点的,为什么要跳后面再到终点,你再回退下前面的路反而可选择的少了,前面的路要能够跳到这么远,就是越前面,压力越少,因为是一个累计最远能跳多远的问题。代码:class Solution {publ原创 2021-06-17 11:58:18 · 209 阅读 · 1 评论 -
排序类问题汇总--字符串or数字等~~~~
剑指 Offer 45. 把数组排成最小的数题目: 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。思路: 我记得之前做过一个排序类的题目,就是自己定义了排序规则函数cmp,这道题也不例外,可以用自定义的cmp排序规则来实现。示例1:输入: [3,30,34,5,9]输出: "3033459"示例2:输入: [10,2]输出: "102"代码:class Solution {public: string minNumbe原创 2021-06-12 15:29:53 · 129 阅读 · 0 评论 -
动态规划类题目总结!!(持续更新~~ 2021.06.24)
To be continue~原创 2021-06-07 10:45:10 · 131 阅读 · 0 评论 -
关于排序的几种经典算法总结(持续更新~~2021.06.02)
1. 快速排序 快速排序其实是在冒泡排序的基础上做出的一个改进。快速排序的基本思想是: 1、先从数列中取出一个数作为基准数,一般是数列最左边的start 2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边 3、再对左右区间重复第二步,直到各区间只有一个数 首先我们先建立一组数据:主要有三个参数,i为区间的开始地址,j为区间的结束地址,X为当前的开始的值.搜索流程: 在快速排序中我们先以一个例子来分析,就是我们的X是我们的start值,我们要将X记录下来,然原创 2021-06-02 17:05:09 · 215 阅读 · 0 评论 -
关于哈希表map, set 以及地址寻址迭代器的知识总结!(持续更新2021. 5.30!!!!!!)
直接先上题目,这个题目我的一个思路使用set,注意到set它只会存元素,没有索引,唯一的搜索方式就是.count和.find,不像map这种key索引。注意到n如果是的话一定是只有一个1的二进制数。所以可以用方法2和3class Solution {public: bool isPowerOfTwo(int n) { // int是可以到2的30次方。 if(n<=0) return false; unordered_set<int>set;.原创 2021-05-30 10:47:23 · 226 阅读 · 0 评论 -
二、关于二叉树搜索树的总结(持续更新~~5.25)
二、关于二叉树搜索树的总结前言: 之前发表的博客:关于二叉树遍历问题的一些总结,观看量还是比较大的,证明大家这类问题能够引起大家的共鸣。 这篇文章在上篇文章的基础上进一步总结介绍二叉搜索树(Binary Search Tree,后文简写 BST)的一些问题。 首先,BST 的特性大家应该都很熟悉了: 1. 对于 BST 的每一个节点node,左子树节点的值都比node的值要小,右子树节点的值都比node的值大。 2. 对于 BST 的每一个节点node,它的左侧子树和右侧子树都是原创 2021-05-25 11:41:01 · 200 阅读 · 0 评论 -
关于二叉树遍历问题的一些总结(持续更新~~~~2021.5.19)
很多经典算法如 回溯、广度优先遍历、分治、动态规划等通常需要转化为树的问题,而树的题目难免涉及到递归的问题,因此掌握树的三种遍历框架是必须的。 先序遍历:根,左,右 中序遍历:左,根,右 后序遍历:左,右,根 可以看到三种遍历的命名主要看根遍历的顺序,左右的先后位置不变。 下面直接贴上遍历的框架代码:/* 二叉树遍历框架 */void traverse(TreeNode root) { // 前序遍历 traverse(root.left) // 中序遍历原创 2021-05-17 09:51:37 · 1453 阅读 · 0 评论 -
Leetcode1269:停在原地的方案数(两类方法的详细记录总结,超详细!!)
有一个长度为 arrLen 的数组,开始有一个指针在索引 0 处。 每一步操作中,你可以将指针向左或向右移动 1 步,或者停在原地(指针不能被移动到数组范围外)。 给你两个整数 steps 和 arrLen ,请你计算并返回:在恰好执行 steps 次操作以后,指针仍然指向索引 0 处的方案数。 由于答案可能会很大,请返回方案数 模 10^9 + 7 后的结果。原创 2021-05-13 17:18:13 · 310 阅读 · 3 评论