- 博客(37)
- 资源 (1)
- 论坛 (1)
- 收藏
- 关注
原创 Leetcode每日一题:41.first-missing-positive(缺失的第一个正数)
int firstMissingPositive(vector<int> &nums){ //遍历一次数组把大于等于1的和小于数组大小的值放到原数组对应位置,对于重复的元素,置0; //然后再遍历一次数组查当前下标是否和值对应,如果不对应那这个下标就是答案,否则遍历完都没出现那么答案就是数组长度加1。 int len = nums.size();...
2020-04-30 11:27:02
53
原创 Leetcode每日一题:38.Count and Say(外观数列)
看题目着实难懂,评论老哥帮忙找答案,可以这么理解:题目的意思是对序列前一个数进行报数,数列第一项为1,那第二项就报第一项的有1个1,输出11,然后第三项就在第二项的基础上报数,第二项是11,第三项不就是2个1么,然后输出21string countAndSay(int n){ string res = "11"; if (n == 1) return "1...
2020-04-30 10:22:12
58
原创 Leetcode每日一题:202.happy-number(快乐数)
bool isHappy(int n){ if (n == 1) return true; if (n == 0) return false; bool a[1000] = {false}; //recording array int res = n; while (true) { int now ...
2020-04-30 08:45:54
69
原创 Leetcode每日一题:1095.find-in-mountain-array(山脉数组中查找目标值)
思路:最多三次二分法:第一次先用二分法找出峰值,后两次依次对峰值左、右侧二分查找target
2020-04-29 21:16:36
62
原创 Leetcode每日一题:48.rotate-image(旋转图像)
思路://旋转void rotate(vector<vector<int>> &matrix){ int len = matrix.size(); for (int start = 0, end = len - 1; start < end; start++, end--) { for (int s = st...
2020-04-29 09:09:28
66
原创 Leetcode每日一题:37.sudoku-solver(解数独)
得用到DFS,一条路走到黑;做这道题得时候一直在想 如何在line / 9 == 1的时候直接返回呢 开始准备用goto 后来改变主意设一个flag就行了bool flag = false;bool check(vector<vector<char>> &vec, int line, int col, char value) //检查这个值能不能被放入{...
2020-04-28 18:43:28
69
原创 Leetcode每日一题:36.valid-sudoku(有效的数独)
踏踏实实一个个元素来bool isValidSudoku(vector<vector<char>> &board){ for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { char value = board[...
2020-04-28 18:40:29
65
原创 Leetcode每日一题:34find-first-and-last-position-of-element-in-sorted-array(排序数组中查找某元素的两端位置)
解题思路:同样二分法先找到index 然后用两个指针指向index 一个向左一个向右遍历 直到找到值都为target的端点处get 到一个新的运行错误:runtime error: addition of unsigned offset to 0x129000a0 overflowed to 0x12900088错误的原因类似于:int i=0;int k=i; cout<<v...
2020-04-28 14:14:52
178
原创 Leetcode每日一题:56. I. 数组中数字出现的次数
本题想到了用异或去解 但是中间步骤没想到:参照大佬解法:相同的数异或为0,不同的异或为1。0和任何数异或等于这个数本身。nums = [1,2,10,4,1,4,3,3]a^a=0a^0=aabc=acba&(-a)=最低位为1的二进制(从又到左)所有的异或结果得到sum=2^10=8flag=-8&8=8可分为两组,一组为与flag相与等于1的[10],另一...
2020-04-28 13:12:40
59
原创 Leetcode每日一题:29.divide-two-integers(两数相除)
参照评论大佬思路 学到了:/** * 解题思路:这题是除法,所以先普及下除法术语 * 商,公式是:(被除数-余数)÷除数=商,记作:被除数÷除数=商...余数,是一种数学术语。 * 在一个除法算式里,被除数、余数、除数和商的关系为:(被除数-余数)÷除数=商,记作:被除数÷除数=商...余数, * 进而推导得出:商×除数+余数=被除数。 * ...
2020-04-28 01:34:47
36
原创 Leetcode每日一题:28.implement-strstr(实现strStr())
思路:KMP实现虽然效率高,但较为复杂;这里索性直接hash,注意int溢出,一定要取余int strStr(string haystack, string needle){ int len1 = haystack.length(); int len2 = needle.length(); if (len2 == 0) return 0; i...
2020-04-27 18:43:05
47
原创 Leetcode每日一题:26.remove-duplicates-from-sorted-array(删除排序数组中的重复项)
正常思维:依次遍历到尾,期间把经过的元素(不重复的 and 重复出现只取一个)依次push_back到vector里 然后把前面的全删除即可;简洁版:因为题目说了不考虑超出新长度后的元素,所以一个for循环nums[j++]=nums[i],遍历完就行了;两者效率相差并不大,因为属于同一个复杂度int removeDuplicates(vector<int> &nu...
2020-04-27 18:13:18
37
原创 Leetcode每日一题:33.search-in-rotated-sorted-array(搜索旋转排序数组)
思路:利用vector变长特性,将前面旋转的部分移到后面,然后二分查找,O(logn)复杂度int search(vector<int> &nums, int target){ int len = nums.size(); int right = len-1, left = 0; //boundary condition if (len ...
2020-04-27 12:21:18
75
原创 Leetcode每日一题:22.generate-parentheses(括号生成)
本题分别采用两种方法:暴力法(set+vector) 以及 dfs(vector)vector<string> generateParenthesis(int n) { set<string> resSet;//利用set的去重 将所有的可能放入set中 然后转换成vector vector<string> res; //boun...
2020-04-27 10:41:33
62
原创 Leetcode每日一题:23.merge-k-sorted-lists(合并K个排序链表)
这一题我的题解也不好意思说出口,把所有值装入变长数组,排序,再转换成链表复杂度应该在O(nlogn)开销处于中流水平评论中的 分治法(二分递归) 最小堆 着实没想到struct ListNode{ int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};ListNode *merge...
2020-04-26 09:28:56
64
原创 Leetcode每日一题:21.merge-two-sorted-lists(合并两个有序链表)
常规方法:采用归并排序的归并方法即可struct ListNode{ int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};ListNode *mergeTwoLists(ListNode *l1, ListNode *l2){ if (l1 == NULL) ...
2020-04-26 09:00:40
39
原创 Leetcode每日一题:20.valid-parentheses(有效的括号)
此类问题提一论用栈解决;这里为了方面 使用map保存键值对#include <iostream>#include <stack>#include <map>using namespace std;bool isValid(string s){ int len = s.size(); if(len==0) return true;...
2020-04-25 10:58:43
36
原创 Leetcode每日一题:46.permutations(全排列)
思路:也可以用递归来求解 但是对应开销要大 且递归的核心部分也没有变化//非递归法#include <iostream>#include <vector>using namespace std;/*Input: [1,2,3]Output:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2],...
2020-04-25 10:38:45
46
原创 Leetcode每日一题:19_remove-nth-node-from-end-of-list(删除链表的倒数第N个节点)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* r...
2020-04-24 14:25:17
23
原创 Leetcode每日一题:17.letter-combinations-of-a-phone-number(电话号码的字母组合) 0ms通过
思路:这道题无非就是全排列的修改版,先建立一个对应号码的字符串数组,然后修改下它们的全排列一次性0ms通过#include <iostream>#include <vector>#include <string>using namespace std;vector<string> letterCombinations(string d...
2020-04-23 22:58:57
174
原创 Leetcode每日一题:15.3sum(三数之和)
思路:这道题与双指针法类似,使用三指针法 头尾各一个 中间一个来回扫,重点是如何剪枝,想了会我也只能剪出下面这样子了,但还是只超5%;评论区笑傻:#include <iostream>#include <vector>#include <algorithm>#include <set>using namespace std;vect...
2020-04-12 10:43:17
17
原创 VScode快捷键(持续更新)
格式整理: Alt + Shift + f复制当前行到下一行:Alt+Shift+下键复制当前行到上一行:Alt+Shift+上键查找: Ctrl + F
2020-04-11 17:18:03
48
原创 LeetCode每日一题:14.longest-common-prefix(最长公共前缀)
首先注意下前缀/后缀和子串的区别:"前缀"和"后缀": "前缀"指除了最后一个字符以外,一个字符串的全部头部组合; "后缀"指除了第一个字符以外,一个字符串的全部尾部组合。"子串":可以出现在一个字符串的任意位置的子字符串;比如"abcde" ,"a"、"ab"、"abc"、"abcd"是前缀,而任意连续位置"bc"、"abc"、"cde"等都属于子串!!...
2020-04-11 17:01:33
34
原创 Leetcod每日一题:151.reverse-words-in-a-string(翻转字符串里的单词)
思路是:双指针去头尾空格,然后遍历中间去空格到每个单词后最多一个空格;然后将整个字符串翻转,然后从头遍历将遇到的单词翻转回去;一开始因为while (s[end] == ' ' && end >= 0) //除去结尾空格end>=0不严谨,导致案例" "死活不通过,我以为结果有问题,试了几次才发现end在这个案例中会减到-1,使得s[-1]这种溢出情况出现;错误原...
2020-04-10 20:39:59
1399
原创 Leetcode每日一题:13.roman-to-integer(罗马数字转整数)
一开始用的map<char,int>,虽然通过但是时间和空间消耗巨大之后改成数组,瞬间时间空间消耗下降;新手的我只能想到用 if 语句判断题中的六个条件;int romanToInt(string s){ int res=0; int len = s.length(); if (len == 0) return 0; int ...
2020-04-10 18:35:25
45
原创 Leetcode:11.container-with-most-water(盛水最多的容器)
一开始直接想用暴力法加剪枝擦边通过的,没想到还是超时了;谁知道最后输入从1-15000一共15000个数据,吓坏!题解中得知双指针实现O(n),真的学到了,羡慕这些大佬的智商;借鉴大佬题解:对O(n)的算法写一下自己的理解,一开始两个指针一个指向开头一个指向结尾,此时容器的底是最大的,接下来随着指针向内移动,会造成容器的底变小,在这种情况下想要让容器盛水变多,就只有在容器的高上下功夫。 ...
2020-04-09 21:11:10
40
原创 JAVA笔记--数组和字符串常用方法
数组定义int arr[];int[] arr2;初始化int arr[] = new int[]{1, 3, 5, 7, 9};int[] arr2 = {2, 4, 6, 8, 10};数组长度length int[] array = new int[5]; System.out.println(array.length);遍历使用for循环使用...
2020-04-09 10:28:02
59
原创 Leetcode:8.string-to-integer-atoi(字符串转整数)
再也不强行装逼要题目的英文描述,好多条件都没看出来,第一遍照着样例打的,错误一堆;应该还能剪枝下;#include <iostream>using namespace std;int myAtoi(string str){ long long result = 0; bool flag1 = false, flag2 = false; for (i...
2020-04-08 21:05:32
26
原创 LeetCode:10.regular-expression-matching(正则式表达)
这道题对于这个水平的我也只能理解下回溯法了;动态规划明天消化;时间复杂度好高class Solution {public: bool isMatch(string s, string p) { if (p.length()==0) return s.length()==0; bool first_match = s[0] && (s[0...
2020-04-07 22:49:12
26
原创 Leetcode:5.longest-palindromic-substring(最长回文子串)
这道题挺难的,暴力法固然爽,但是仍会超时,优化后也是,可能优化不够把;从0 - length-1用中心扩展法能保证比暴力法O(n^3)低;好像官网还给出三个方法,有时间可以细琢磨;#include <iostream>#include <string>using namespace std;//中心扩展法string longestPalindrome(st...
2020-04-06 16:08:02
25
原创 Leetcode每日一题:4.寻找两个有序数组的中位数
类似归并排序的合并阶段;本来想直接用一个pre和now,然后每次用k++,加到一般时直接出结果,后来觉得麻烦还是用vector了;class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int i =...
2020-04-05 21:37:20
34
原创 课外题:需要排序的子数组
#include <iostream>#define max_length 20using namespace std;int length;int a[max_length] = {2, 3, 7, 5, 4, 6};int result[4];void incre_sort(int a[]){ int p = -1, q = -1; //左右扫描 ...
2020-04-05 20:13:56
34
原创 排序算法之基数排序
基数排序就是按位数排序,最大数有n位就要进行n次入桶出桶;原理如下:应该都懂C++代码附上:看了几个代码,觉得还是自己写一下比较容易理解;#include<iostream>#include<vector>#include<cmath>#define max_length 100using namespace std;int a[max_le...
2020-04-05 11:25:19
32
原创 Leetcode每日一题:3.无重复字符的最长子串
耗时较多,要进一步优化;int lengthOfLongestSubstring(string s){ if(s.length()==0) return 0; //空字符串判断 int a[100]={0}; //ascii字符可见字符不超过100个,所以数组大小足够 for(int j=0;j<100;j++) a[j]=0; int...
2020-04-04 17:23:22
38
原创 LeetCode每日一题:2.两数相加
这题一开始准备用最笨的方法,把两个链表的数化出来,相加,再把结果化成链表的形式,但执行起来比较繁琐,且超时;所以参考了官方解答,采用进位逐个相加的方式简单不少,并且量少;而且从今天官网给出的java官方解答,java不用指针,比如ListNode head=new ListNode(0);有时间还是学学java吧,毕竟跨平台且实用性强,语法方面和C++差别不大;一开始时间70+ms,现在...
2020-04-03 20:51:00
69
原创 Leetcode每日一题:7.整数反转
get到Clion的一个新问题:Clion中多个main函数的问题;详情借鉴:解决Clion中多个cpp文件运行时出现multiple definition of `main’class Solution {public: int reverse(int x) { long long result=0; while(x) { ...
2020-04-02 22:38:51
31
原创 Leetcode每日一题: 1.two-sum(两数之和)
执行时间上仍有较大改进之处;今天还get一个新的编译错误点:编译错误 error: control may reach end of non-void function [-Werror,-Wreturn-type]->大概率是编译器认为在有返回值的函数你并未给出恰当的返回值,此时在最后加一个恰当的return即可,该问题也在牛客上出现过class Solution {publ...
2020-04-02 00:21:07
28
devC++出现error: ld returned 1 exit status错误
发表于 2019-11-11 最后回复 2019-11-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝