自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

原创 【LeetCode热题100道】37. 解数独

用回溯法解出了所有可能的解。class Solution {public: vector<vector<vector<char>>> res; void solveSudoku(vector<vector<char>>& board) { dfs(0, board); board = res[0]; } bool check(int num, vector<vec.

2022-03-28 20:57:24 216

原创 【LeetCode热题100道】36. 有效的数独

class Solution {public: bool isValidSudoku(vector<vector<char>>& board) { vector<vector<bool> > row(9, vector<bool>(9)); vector<vector<bool> > col(9, vector<bool>(9)); vecto.

2022-03-28 20:03:11 237

原创 【LeetCode热题100道】33. 搜索旋转排序数组

class Solution {public: int search(vector<int>& nums, int target) { if(nums.size() < 1) { return -1; } int left = 0; int right = nums.size()-1; int mid = 0; while(left&.

2022-03-28 19:42:17 232

原创 【LeetCode热题100道】34. 在排序数组中查找元素的第一个和最后一个位置

class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { if(nums.size()<1 || nums[0] > target || nums[nums.size()-1] < target) { return vector<int>{-1, -1}; }.

2022-03-28 19:15:59 188

转载 【LeetCode热题100道】35. 搜索插入位置

class Solution {public: int searchInsert(vector<int>& nums, int target) { int left = 0; int right = nums.size()-1; while(left <= right) { int mid = (left+right)/2; if(nums[mid] == .

2022-03-28 18:44:04 61

转载 【LeetCode热题100道】31. 下一个排列

全排列的方法会用到额外空间,不符合题目要求,且需要考虑重复元素。转自评论区@赵晨霁不是降序的情况下:1.找到最末尾的递减序列,以及这个序列的前一个值 i ,如:[2,3,5,4,1] 则找到[5,4,1] nums[i]=32.将 i 后升序排列,则:得到 […,1,4,5]3.将 i 后面的序列中 第一个大于nums[i]的值与其交换,则:得到结果[2,4,1,3,5]class Solution {public: void nextPermutation(vector<in.

2022-03-26 16:12:15 53

转载 【LeetCode热题100道】30. 串联所有单词的子串

暴力解法class Solution {public: vector<int> findSubstring(string s, vector<string>& words) { if(s.length() == 0 || words.size() == 0) { return {}; } if(s.length() < words.size()*words[0].le.

2022-03-26 14:50:28 95

原创 【LeetCode热题100道】29. 两数相除

class Solution {public: int divide(int dividend, int divisor) { if(divisor == 0 || (dividend == INT_MIN && divisor == -1)) { return INT_MAX; } int result = 0; if(dividend == 0) { .

2022-03-25 21:57:52 179

原创 【LeetCode热题100道】26. 删除有序数组中的重复项

class Solution {public: int removeDuplicates(vector<int>& nums) { if(nums.size() < 2) { return nums.size(); } int j = 1; for(int i = 1; i< nums.size(); i++) { if.

2022-03-25 21:26:11 185

原创 【LeetCode热题100道】24. 两两交换链表中的节点

class Solution {public: ListNode* swapPairs(ListNode* head) { ListNode* root = new ListNode(0); root->next = head; ListNode* p1 = root; ListNode* p2; while(p1->next != nullptr && p1->next->.

2022-03-25 21:07:49 1281

原创 【LeetCode热题100道】22. 括号生成

简单的回溯,left>right为剪枝,此时’(‘个数少于’)’,为不匹配情况。class Solution {public: vector<string> generateParenthesis(int n) { vector<string> ve; dfs(n, n, ve, ""); return ve; } void dfs(int left, int right, vector<st.

2022-03-25 19:17:15 174

原创 【LeetCode热题100道】5. 最长回文子串

动态规划,写的比较糙。class Solution {public: string longestPalindrome(string s) { int max = 1; int left = 0; int n = s.size(); int** dp = new int*[n]; for(int i = 0; i < n; i++) { dp[i] = new int.

2022-03-25 18:48:14 1408

原创 【LeetCode热题100道】21. 合并两个有序链表

class Solution {public: ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) { ListNode* root = new ListNode(0); ListNode* result = root; while(list1 != nullptr && list2 != nullptr) { if(list1.

2022-03-24 20:56:54 2123

原创 【LeetCode热题100道】20. 有效的括号

class Solution {public: bool isValid(string s) { stack<char> store; for(int i = 0; i < s.size(); i++) { if(s[i] == '(') { store.push(')'); } else if(s[i.

2022-03-24 20:46:34 216

原创 【LeetCode热题100道】19. 删除链表的倒数第 N 个结点

用一个变量count记录节点数量,注意当n与count相等以及要删除最后一个节点的情况。class Solution {public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* root = head; ListNode* p = head; ListNode* temp = nullptr; int count = 0; whil.

2022-03-24 19:55:59 709

原创 【LeetCode热题100道】18. 四数之和

与三数之和相同的思路,双指针法,注意去重和溢出。class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> result; int n = nums.size(); if(n == 0) { .

2022-03-24 19:02:29 172

原创 【LeetCode热题100道】16. 最接近的三数之和

暴力破解会超时,与上一题一样,使用双指针法,时间复杂度O(n*n)。class Solution {public: int threeSumClosest(vector<int>& nums, int target) { int result = 0; sort(nums.begin(), nums.end()); result = nums[0] + nums[1] + nums[2]; for(int .

2022-03-23 22:25:56 171

转载 【LeetCode热题100道】15. 三数之和

暴力破解法的重复元素非常难处理,利用双指针法可以有效降低复杂度,注意全0情况的处理。class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> result = {}; if(nums.size() < 3) { retu.

2022-03-23 20:56:21 62

原创 【LeetCode热题100道】14. 最长公共前缀

以第一个字符串作为基准,判断每一个字符串相同下标的字符是否全部相同,复杂度O(m*n).class Solution {public: string longestCommonPrefix(vector<string>& strs) { if(strs.size() == 0) { return ""; } int n = strs.size(); string res.

2022-03-22 20:17:54 105

原创 【LeetCode热题100道】9. 回文数

class Solution {public: bool isPalindrome(int x) { if(x < 0) { return false; } int num = x; std::stack<int> st; int result = 0; while(x != 0) { st.push(.

2022-03-22 19:33:49 96

原创 【LeetCode热题100道】8. 字符串转换整数 (atoi)

class Solution {public: int myAtoi(string s) { int num = 0; int i = 0; while(s[i] == ' ') { s = s.erase(i,1); } int flag = 1; if(s[0] == '+') { flag = 1; .

2022-03-21 22:26:29 149

原创 【LeetCode热题100道】7. 整数反转

要求不能使用long,int类型溢出没想到好的方法。改用字符串后溢出的地方判断的还是不好。class Solution {public: int reverse(int x) { string result = ""; int flag = 1; if(x < 0) { flag = -1; } std::stack<int> st; w.

2022-03-21 21:41:15 343

原创 【LeetCode热题100道】6. Z 字形变换

找规律class Solution {public: string convert(string s, int numRows) { string result = ""; if(numRows == 1) { return s; } int temp = 2*numRows-2; for(int i = 0 ; i < numRows; i++) {.

2022-03-21 19:44:40 141

转载 【LeetCode热题100道】4. 寻找两个正序数组的中位数

以下思路转自评论区大佬@Wait想念这道题让我们求两个有序数组的中位数,而且限制了时间复杂度为O(log (m+n)),看到这个时间复杂度,自然而然的想到了应该使用二分查找法来求解。那么回顾一下中位数的定义,如果某个有序数组长度是奇数,那么其中位数就是最中间那个,如果是偶数,那么就是最中间两个数字的平均值。这里对于两个有序数组也是一样的,假设两个有序数组的长度分别为m和n,由于两个数组长度之和 m+n 的奇偶不确定,因此需要分情况来讨论,对于奇数的情况,直接找到最中间的数即可,偶数的话需要求最中间两个数.

2022-03-20 22:23:17 57

原创 【LeetCode热题100道】3. 无重复字符的最长子串

自己的思路:class Solution {public: int lengthOfLongestSubstring(string s) { if(s.length() == 0) { return 0; } int max = 1; int left = 0; std::unordered_map<char, int> temp; temp.i.

2022-03-20 15:55:59 967

原创 【LeetCode热题100道】445.两数相加(正序存储)

自己的思路:class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* root =nullptr; stack<int> stack_l1; stack<int> stack_l2; int carry = 0; while(l1 != nullptr) .

2022-03-19 20:25:39 74

原创 【LeetCode热题100道】2.两数相加(逆序存储)

自己的思路:class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int carry = 0; ListNode* root = new ListNode(0); ListNode* cursor = root; while(l1 != nullptr && l2 != nullptr) .

2022-03-19 16:52:20 76

原创 【LeetCode热题100道】1.两数之和

自己的思路:class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> result{0, 0}; for(int i = 0; i < nums.size()-1; i++) { int temp = target - nums[i]; .

2022-03-19 15:21:39 259

原创 滴滴笔试 多源D点

题目描述:一棵树有n个节点,其中m个是特殊节点,边的权重都是1,统计距离m个特殊节点都不超过d的节点数,包括特殊节点。输入:第一行包括三个正整数,n,m,d分别表示树有n个节点,其中m个是特殊节点,d是距离。(1<=n,m,d<=50000)输出:符合要求的节点数目完整题目可以查看:https://www.nowcoder.com/discuss/236085?type=post...

2019-08-29 14:56:49 178

原创 腾讯笔试 飞机航线

感觉应该是Dijkstra计算最短路(优先队列优化),然后用rmq进行查询。

2019-08-29 14:01:09 152

原创 腾讯笔试 n*m游戏地图

题目描述:小Q在玩一个游戏,一个n*m的面板上有两种符号‘.’和‘x’,‘.’代表还没被破坏,‘X’代表已经被破坏,已经被破坏的方块走一次就会碎掉(不能再走了),没被破坏的走两次才会碎掉。现在告诉你起点和终点(面板的左上角坐标为(1,1),右下角坐标为(n,m))。问你能否走到终点并恰好使终点的方块碎掉,输出YES或者NO。(1<=n,m<=500)例如:4 6X…XX…XX....

2019-08-29 14:00:59 657

原创 网易2020笔试真题 数字圆环

题目描述:一个数组arr,数组中元素的位置可以交换,并且可以交换任意次。能否使得数组中每个元素的值小于与它相邻两个元素的和(数组可以看成一个环)。如果能输出“YES”,否则输出“NO”思路:首先对数组进行从大到小排序,第一个数小于后两个数的和,后面的数都小于周围两个数的和,除了最后一个数字,都满足相邻两个数字大于自己对于最后一个数字,交换最后两个数字,判断是否满足条件即可。...

2019-08-29 14:00:42 1458 1

原创 滴滴出行笔试 算术表达式交换

题目描述:将一个算术表达式按字典序排序,同时保证表达式的最终结果不变,例如a<b,a的字典序小于b。很丑陋的代码,考虑所有特殊情况,但考试时没有考虑到减和除也存在可以交换的情况,如果大家有简单的思路欢迎交流。import sysloop = int(sys.stdin.readline().strip())n = [str(x) for x in sys.stdin.readline...

2019-08-29 13:55:24 180

原创 美团2020笔试 字符串逆排序

题目描述:将以逗号分隔的输入字符串按z…a的顺序排序,空字符位于最前面,当一个字符串是另一个字符串的子串时,排在前面。import sysimport operatordef resort(arr): n = len(arr) count = 0 for i in range(n): if arr[i] == '': arr[i...

2019-08-23 19:24:21 425

原创 美团2020笔试 字符串的最长公共前缀

题目描述:有最大长度十万的多个字符串。任意给两个字符串的编号,返回这两个字符串的最长公共前缀长度。输入:第1行输入一个整数n,代表字符串数量,n最大为10000;第2~n+1行,每行一个字符串,字符串长度最大为100000;第n+2行开始,每行输入两个整数a和b,代表需要计算公共前缀的字符串编号。输出:返回a、b对应的字符串的最长公共前缀长度。如果a或b不是有效的字符串编号,则对该行...

2019-08-23 14:34:26 387

原创 腾讯笔试 密室探险

题目描述:小Q在假期的时候去一个密室探险,这个密室可以看做一个n*3的格子,小Q最开始可以选择第一行的任意一个格子进入,此后的每一步,他可以选择下一行的当前位置或左侧一格或右侧一格。简单地说,假设小Q的当前位置为(x,y),那么他下一步可以前进至(x+1,y-1),(x+1,y)或(x+1,y+1),但他不能走出格子。每个格子都有一个数字,代表走到该格子可以获得的分数。但密室中有一些魔法格子,它们...

2019-08-21 16:48:52 248

原创 腾讯笔试 冰淇淋店

题目描述:做冰淇淋需要 n 种原料,现每种原料有存货 W = [w1, w2, …] 个,对应的价格 V = [v1, v2, …]存货用完就需要去商店买,现共有钱 M 元。问,最多能做多少冰淇淋。(1<=n,vi<=100,1<=m,wi<=10^12)示例输入:3 102 5 32 1 3输出:4这是当时写的代码,思路就是选存货最少的做成冰淇淋,存...

2019-08-21 15:46:09 113

原创 腾讯笔试 拔栏杆

题目描绘:小Q是一名勤劳的园林工,他想修缮一下园林里的栅栏,栅栏由n根栏杆组成,第i根栏杆的长度为hi,小Q的修缮工作首先需要先连续拔除k根栏杆,小Q想知道如果连续拔k根栏杆,拔掉的最小长度总和是多少?第一行两个数n和k,1<=n<=150000,1<=k<=n,第二行n个数。这是当时的代码,用了太多sum函数,导致复杂度过高,只通过了40%,后来发现改为直接比较0,...

2019-08-21 14:54:15 266

原创 作业帮面试题 最长不重复子串

与LeetCode第三题——最长不重复子串一样,给定 “abcabcbb” ,没有重复字符的最长子串是 “abc” ,那么长度就是3。当时让我返回长度和子串。当时用的动态规划,da[i]表示到i最长的不重复子串长度。下面介绍双指针法,从索引 ii到 j−1j−1之间的子字符串sijsij已经被检查为没有重复字符...

2019-08-21 11:18:58 188

原创 作业帮面试题 字符串的组合问题

输入一个字符串,输出该字符串的所有组合。如:若字符串为:abc,则应输出:ab、ac、bc、abc.当时的第一反应是递归,但是对终止条件一直没想明白,面试官提示一个字母有两个状态,0和1,0代表有,1代表没有,所以我设置了一个01数组存储标志位,然后按数组输出。思路1:暴力法。通过举例子,找规律可以发现当数组长度>=3之后的规律是一致的,前n个字符合体即s[:m],拼接上后面s[m:]...

2019-08-21 10:29:44 298

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除