
算法
农场主
这个作者很懒,什么都没留下…
展开
-
leetcode---Java中数据类型的定义及算法中常用方法
定义一个mapMap<Integer,TreeNode> parent = new HashMap<Integer,TreeNode>();定义一个setSet<Integer> visited = new HashSet<Integer>();定义一个listList<TreeNode> list = new ArrayList<TreeNode>();定义栈Deque<TreeNode> stack =原创 2021-06-25 17:06:20 · 200 阅读 · 0 评论 -
树的三种遍历
先序遍历:头左右1:弹出就打印2.把右压入栈3.把左压入栈后续遍历:左右头原创 2021-06-21 15:10:46 · 112 阅读 · 0 评论 -
树的一些名词理解
zhe原创 2021-05-28 10:23:58 · 95 阅读 · 0 评论 -
使用compare进行定义排序,对从小到大,从大到小,如何使用的理解
PriorityQueue<Integer> queue = new PriorityQueue<Integer>(new Comparator<Integer>(){ public int compare(Integer a,Integer b){ return b - a; }该CompareTo()方法,如果指定的数与参数相等返回0;如果指定的数小于参数返回 -1;如果指定的数大..原创 2021-05-26 11:59:03 · 2830 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子 动态规划
class Solution { public int cuttingRope(int n) { int[] dp=new int[n+1]; dp[0] = 0; dp[1] = 1; int a ; for (int i = 2; i <=n ; i++) { for (int j = i-1; j >=1 ; j--) { a=(dp[j] &g.原创 2021-03-24 21:08:31 · 80 阅读 · 0 评论 -
leetcode 139. 单词拆分 --动态规划
这道题最开始的想法是一个一个判断就可以了,提交的卡住了这个就是说要考虑最后到达结果,会有很多不同的解决方式。所以方法就是建立一个长为s.length()+1的布尔类型的数组,然后用这个数组来表示 第 i 之前的字符串s能不能用字典来表示。之后再i的基础上在进行判定 i到j能不能用字典来表示动态规划的问题要建立dp来存储中间通用的数据。class Solution { public boolean wordBreak(String s, List&l...原创 2021-03-23 22:08:48 · 112 阅读 · 0 评论 -
720. 词典中最长的单词
字典序的一道题,主要是了解字典序的含义,以及怎么写自己需要的树的结构。这道题说的就是要先把单词放入到字典树中然后在遍历一次,并且判断这条分支是不是每一个节点都是true(每一个都是一个单词)class Trie{private: bool is_string; Trie *next[26];public: Trie(){ is_string =...原创 2020-04-04 23:06:21 · 160 阅读 · 0 评论 -
LeetCode 94. 二叉树的中序遍历
就是二叉树的中序遍历,这道题感觉主要是先要考迭代的方法,毕竟递归的方法在有些人看来有些简单。可先看看递归把# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# ...原创 2020-01-09 11:50:53 · 93 阅读 · 0 评论 -
leetcode 36. 有效的数独
这道题一开始是想要采用哈希表的方式来做,但是对于哈希表还不是很熟系,对于python中的两层的for循环也没有很了解,还是欠缺了很多的地方class Solution: def isValidSudoku(self, board: List[List[str]]) -> bool: row = [[x for x in y if x!='.'] for y in...原创 2020-01-08 11:20:46 · 123 阅读 · 0 评论 -
LEETCODE 135. 分发糖果
这道题的想法很简单,就是需要的判断条件太多了,我是不断根据样例来在自己的代码中添加判断条件的class Solution {public: int candy(vector<int>& ratings) { int n = ratings.size(); if(n==0) return 0; else if(n=...原创 2019-12-12 22:09:22 · 87 阅读 · 0 评论 -
Leetcode: 6. Z 字形变换
两种路子1.class Solution {public: string convert(string s, int numRows) { if (numRows == 1) return s; vector<string> rows(min(numRows, int(s.size()))); // 防止s的长度小于行数 int curRow = 0; ...原创 2019-12-10 22:59:21 · 162 阅读 · 0 评论 -
LeetCode 96. 不同的二叉搜索树
这道题真的是说好的是DP,看答案发现很多人说是卡塔兰数的一个例子,又看了什么是卡塔兰数,想了半天才弄明白了,这道题的代码是真的简短啊。(首先要明白什么是二叉搜索树)看一下前三个的实例吧在三个这里发现一些DP的思路:就是分为以1为根节点,2为根节点,3为根节点的三种情况,在以2为根节点进行分析,因为1<2所以1一定是左节点,3是右节点,所以2为根节点的情况有:1*1个.以此类推。...原创 2019-12-05 22:16:11 · 130 阅读 · 0 评论 -
力扣 19 删除链表的倒数第N个节点
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* r...原创 2019-10-28 21:15:08 · 141 阅读 · 0 评论 -
力扣 4. 寻找两个有序数组的中位数 C
这道题的重点在于时间复杂度 O(log(m+n)),看到这个一般都会想到二分法,因为二分法的时间复杂度是O(log(m+n))下面是初始的一些想法,如果你想看更好的完整版的算法思路 A[k/2] = B[k/2],那么第 k 大的数就是 A[k/2] A[k/2] > B[k/2],那么第 k 大的数肯定在 A[0:k/2+1] 和 B[k/2:] 中,这样就将原来的所...原创 2019-10-23 21:18:59 · 164 阅读 · 0 评论 -
力扣 3 无重复字符的最长子串 C++
class Solution {public: int lengthOfLongestSubstring(string s) { int max=0, i=0,j=0,k=0; for(i;i<s.size();i++){//i用来遍历字符串 for(j=k;j<i;j++)//j是遍历i以前的字符,看看有没有重复的...原创 2019-10-16 09:37:34 · 122 阅读 · 0 评论 -
力扣 922 按奇偶排序数组 II
class Solution {public: vector<int> sortArrayByParityII(vector<int>& A) { int j; for(int i=0;i < A.size();i++){ if( ( (i%2==0) && (A[i]%2==...原创 2019-10-11 21:58:55 · 190 阅读 · 0 评论 -
力扣 01 两数之和 c++
class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { int i,j; int a[2]; for(i=0;i<nums.size()-1;i++) { for(j=...原创 2019-09-18 10:46:56 · 243 阅读 · 0 评论 -
力扣 7 :整数反转 c++
class Solution {public:# define INT_MIN (-INT_MAX - 1)# define INT_MAX 2147483647 int reverse(int x) { int rpc = 0; while(x != 0){ if(rpc > INT_MAX/...原创 2019-09-18 19:23:34 · 406 阅读 · 0 评论 -
力扣 20 有效的括号
//map<char,char> m={{'(',')'},{'{','}'},{'[',']'}};class Solution {public: bool isValid(string s) { stack<char> st; if(s.size()%2) //为奇数则一定不匹配 return...原创 2019-09-19 21:46:04 · 275 阅读 · 0 评论 -
力扣 997 找到小镇的法官 C++
这道题的思路是一共有N个人,法官会被信任N-1次,信任其他人为0次,所以计算每个人的出度与入度,被信任+1,信任别人-1,所以法官的记录会是N-1。这群人里面要不就没有法官,如果有法官只会是一个人,不可能同时出现两个法官。class Solution {public: int findJudge(int N, vector<vector<int>>&...原创 2019-09-21 21:50:24 · 327 阅读 · 0 评论 -
力扣C++ 1042. 不邻接植花
先说一下这道题的思路:主要是先根据给出的输入把图画出来,从第一个花园出发,设计第一个花园种植第一种花,之后到第二个花园,看看花园二与花园一之间是否有通路,如果有的话,把第二个花园种植上第二种花,否则种植第一种花一次类推。题目中的输入设置最多一个花园与其他三个花园相连接,所以只会有四种花的出现。class Solution {public: vector<int> gar...原创 2019-09-25 16:35:19 · 340 阅读 · 0 评论 -
力扣 346 两个数组的交集 c++
class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { int a,b,c; vector<int> result; sort(nums1.begin(),nums...原创 2019-09-27 20:53:04 · 251 阅读 · 0 评论 -
力扣15 三数之和 C++
这道题两个难点。第一个是不能使用三层循环,因为会时间溢出,第二个也是主要的问题如何去重。一开始想要直接排序后去重,但是这样的话会缺失解,比如{-1,-1,2}这个解就得不到,所以不能直接去重。后来想到了可以判断nums[i]与nums[i-1]是否相同,如果相同可以进行i++,这样就可以去重了,但这只是死一次去重,要用不同的三个数,所以要去进行三次去重。【这个在后面解释】。三层循环不能用就化简为2...原创 2019-10-07 21:18:13 · 288 阅读 · 0 评论 -
力扣 16 最接近的三数之和 C++
这道题和15题的思路是一样的都是先遍历,之后采用左右指针进行移动找出最接近的数值class Solution {public: int threeSumClosest(vector<int>& nums, int target) { // 排序 sort(nums.begin(), nums.end()); int ...原创 2019-10-08 22:53:41 · 202 阅读 · 0 评论 -
CodeBlock无法编译问题
今天想用C++做点算法题,所以在网上下载了CodeBlock,但是打完代码发现无法运行,百度查资料发现原来CodeBlock居然有带编译器和不带编译器两种软件,不带编译器的大概30M,带编译器的是80M,所以以后最后下载直接带有编译器的CodeBlock下载安装,否则真是有够费劲的。带编译器的地址:https://share.weiyun.com/5TR7Ewh...原创 2019-09-18 10:44:39 · 530 阅读 · 1 评论