- 博客(84)
- 收藏
- 关注

原创 Unity3d--第三人称角色移动控制
第三人称的角色移动控制方案有很多种: 1. rigidbody.velocity() : 通过控制刚体的速度 来实现对角色的移动控制2. rigidbody.MovePosition() : 通过调整刚体的Position 来实现对角色的移动控制3. rigidbody.AddForce() / AddRelativeForce(): 通过给刚体的施加力,来实现对角色的移动控制,模拟惯性(例如:开车)
2017-09-24 15:24:53
10659
1

原创 Unity3d--实现第三人称视角(相机跟随)
实现第三人称视角有三种:方案1:最简单的就是 直接 把主相机作为Player角色的子物体,并自行固定好相机的位置方案2:设置一个空的GameObject,并且与Player的旋转和位置保持一致,然后将 主相机 设置成该GameObject的子对象。
2017-09-13 02:40:35
25956
2
原创 LeetCode. 673. 最长递增子序列的个数(动态规划 + 状态累计)
#include <vector>#include <iostream>using namespace std;class Solution {public: int findNumberOfLIS(vector<int>& nums) { pair<int, int> result(1, 0); //长度 +...
2019-05-13 13:33:12
620
原创 LeetCode. 二叉树的最近公共祖先(树遍历+用栈存两条路径+寻找路径中的节点)
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}};#include <vector>using namespace std;...
2019-05-10 17:26:00
814
原创 LeetCode. 二叉树中的最大路径和(递归,分左右子树进行判断)
给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3]1/ 2 3输出: 6struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int...
2019-05-10 17:13:31
524
原创 LeetCode. 被围绕的区域(深搜 / 广搜 / 并查集)
给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X#include <vector>#include <map>...
2019-05-10 12:02:05
395
原创 LeetCode.直线上最多的点数 (最大公约数对分数进行约分,自建string作分数)
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。输入: [ [ 1 , 1 ], [ 2 , 2 ], [ 3 , 3 ] ]输出: 3class Solution {private: //获取斜率 //通过string 构造分数,避免精度不正确 //使用最大公约数化简 分子和分母 string getK(int y, int x) { //y有可能为...
2019-05-03 18:04:15
485
原创 LeetCode .零钱兑换(动态规划)
1、给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:· 输入: coins = [1, 2, 5], amount = 11· 输出: 3· 解释: 11 = 5 + 5 + 1#include <vector>#include <alg...
2019-05-02 13:45:50
714
原创 LeetCode. 分割回文串(Permutations)【传统常规递归回溯,类似DFS】
#include <string>#include <vector>using namespace std;class Solution {private: //简单判断回文 bool isPalindromeString(const string& str) { int i = 0, j = str.size() - 1; while (i ...
2019-04-11 17:30:35
256
原创 LeetCode. 寻找两个有序数组的中位数(二分技巧 + 边界处理问题)
核心讲解可参考:https://blog.youkuaiyun.com/hit1110310422/article/details/80865539i 值用于切割nums1,j 用于切割num2对 nums1数组 进行二分查找,搜寻到恰好符合要求的 i 值要求: B[ j − 1 ] ≤ A[ i ] 且 A[ i - 1 ] ≤ B[ j ]前提需要满足 :1、Length(nums1...
2019-04-09 15:20:32
421
原创 LeetCode. Task Scheduler(CPU任务调度安排算法,减少待机时间【贪心】)
class Solution {public: int leastInterval(vector<char>& tasks, int n) { vector<int> task_vec(26, 0); for (int task = 0; task < tasks.size(); ++task) ++task_vec[tasks[task] ...
2019-03-30 17:47:20
1499
原创 LeetCode. 递增的三元子序列(时间O(n)空间O(1))
class Solution { public: bool increasingTriplet(vector<int>& nums) { int m1 = INT_MAX, m2 = INT_MAX; for (auto a : nums) { if (m1 >= a) m1 = a; el...
2019-03-29 10:09:14
229
原创 C++ —— 数组/指针 做为函数参数传递
#include <vector>#include <iostream>using namespace std;void fun1(int *a) { printf("1、int *a :%x %d\n", &a, sizeof(a));}void fun2(int a[2]) { printf("2、int a[2] :%x %d\n", &am...
2019-03-16 15:48:51
2127
原创 LeetCode. 逆波兰表达式求值(后缀表达式 - 类似于树的后序遍历 // 中缀转前缀or后缀)
后缀表达式,可以看作是一棵树的后序遍历,树的叶子节点均为操作数,非叶子节点均为操作符号中序遍历特征就是先看子节点 再看父节点所以对于后缀表达式的解析,只需要一个栈来存取操作数从左→→→右遍历:— 遇到操作数则入栈— 遇到操作符号则说明 该子树的孩子节点都遍历完了,回到了父节点了(后序遍历的逻辑),则将栈顶弹出两个操作数 和 该操作符号 进行运算#include <vector...
2019-03-15 16:37:50
1124
原创 LeetCode. Insert Delete GetRandom (巧用map与vector结合,实现O(1)复杂度)
unordered_map 底层数据结构是hash表,插入insert和删除delete都是 O(1) 时间复杂度利用vector来实现 random() 方法,map的key保存元素值,value保存元素存在vector的数组下标对于删除delete的数val,直接使用vector的末尾数字填充到被删除的数的位置,并且还需要修改map,将被删的数移除,并且将末尾数字在map中对应的valu...
2019-03-15 12:20:57
339
原创 LeetCode. 矩阵置零(巧用数组首行首列存取信息,空间复杂度O(1))
#include <vector>using namespace std;class Solution {public: void setZeroes(vector<vector<int>>& matrix) { bool firstRowHasZero = false; bool firstColumnHasZero = false;...
2019-03-14 14:38:14
285
原创 LeetCode. 两整数之和(位运算,计算加/减)
正数相加的位运算操作好理解负数相对难理解C++中,负数以补码形式存放,所以bitset<32>(a) 获取到的 负数a 的二进制数是补码例如:3 + (-1)可以看做:【暂时用8位处理】 0000 0011+ 1111 1111 (原码为:1000 0001,除了符号位,取反+1)————————将这两个二进制直接相加,得到 0000 0010所以很巧妙,二...
2019-03-07 22:28:06
485
原创 LeetCode. 二叉树的序列化与反序列化(非递归【层次遍历】or 递归【先序遍历】)
#include<string>#include<sstream>#include<queue>#include<iostream>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val...
2019-03-07 15:35:01
1173
原创 LeetCode. 三数之和(经典)
//1、for循环一遍,找到第一个数a//2、标记后面的数组的最左边为left,最右边为right//3、left与right指针相互靠近,依次判断num[left]+right[right]==-a//4、O(n^2)#include <vector>#include <algorithm>#include <set>using namespac...
2019-03-07 00:44:21
225
原创 LeetCode. 位1的个数(位运算)
#include <stdint.h>using namespace std;class Solution {public: //方法1:O(32) int hammingWeight1(uint32_t n) { int result = 0; for (int8_t i = 0; i < 32; i++) { if (n & (1 <...
2019-03-05 11:18:54
787
原创 LeetCode. 最大子序和 (动态规划)
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。简单动态规划处理:1、数组 dp[ i ] 看作:前 i 个的最大子序和。2、 dp[ i ] 要么等于当前 nums[ i ] 的值,要么等于...
2019-03-03 20:12:39
201
原创 LeetCode 回文链表(遍历过程中逆置一半的链表)
struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};class Solution {public: bool isPalindrome(ListNode* head) { int lenth, i; Li...
2019-02-06 22:16:05
262
原创 LeetCode 合并两个有序链表(非递归迭代:原地合并 + 递归)
struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(nullptr) {}};#include <iostream>using namespace std;class Solution {public: //个人第一想法版本(非递归迭代) Li...
2019-02-06 00:29:07
499
原创 LeetCode 反转链表(递归 / 迭代)
//递归 //reverseList()返回的是从currentNode节点开始后面的链表整个反转后的结果的头节点 ListNode * reverseList(ListNode* currentNode) { if (currentNode == nullptr)return nullptr; if (currentNode->next == nullptr)return ...
2019-02-05 19:20:27
368
原创 Morris遍历详解——二叉树先序中序后序遍历( 时间复杂度O(N),空间复杂度O(1) )
Morris二叉树遍历:来到当前的节点:Cur如果Cur无左孩子,Cur向右移动 (Cur = Cur.right)如果Cur有左孩子,找到Cur左子树上最右的节点,记为 mostright(1) 如果mostright的右指针为null,则让其右指针指向Cur,并使Cur向左移动 (Cur = Cur.left)(2) 如果mostright的右指针指向Cur,则让其右指针...
2018-11-07 01:28:41
7986
原创 LeetCode5.最长回文子串————Manacher算法
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。示例 1:输入: “babad”输出: “bab”注意: &amp;quot;aba&amp;quot;也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”方法一: 动态规划,O(n^2)i 为做指针,j 为右指针。dp[ i ][ j ]指:从i到j位置组成的字串是否回文,回文则1,否则0。若str[ i...
2018-11-03 16:56:09
469
原创 LeetCode516. 最长回文子序列 (动态规划)
经典的字符串动态规划,定义两个首尾指针i和j状态初始条件:dp[ i ][ i ] = 1 ( i = 0 到 n - 1)状态转移方程: if( s[ i ] == s[ j ] ):dp[ i ][ j ] = dp[ i + 1 ][ j - 1 ] + 2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
2018-10-31 18:25:52
933
原创 LeetCode382. 链表随机节点————蓄水池抽样算法
//蓄水池抽样class Solution {private: ListNode * HEAD;public: //初始化 Solution(ListNode* head) { srand((unsigned)time(nullptr)); HEAD = head; } //获取链表上的随机节点的值 int getRandom() { L...
2018-10-18 20:30:50
606
原创 LeetCode142. Linked List Cycle||(环形链表)——— 判断链表是否有环以及求其入环节点
struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(nullptr) {}};//判断链表是否有环//方法://1、空间复杂度n:使用set集合保存每一个节点,判断是否有重复//2、空间复杂度1:使用两个指针,快指针走两步,慢指针走一步;// 若快指针为null则无环。/...
2018-10-15 15:57:07
274
原创 网易2017游戏研发面试题 —— 推箱子(广搜BFS判断)
#include<iostream>#include <queue>#include <map>using namespace std;typedef pair<int, int> point;typedef pair<point, point>state;const int dirX[4] = { 0,0,1,-1 };...
2018-09-29 21:33:38
888
原创 KMP算法模板 - 构建next最长前缀数组 与 kmp核心算法
#include <iostream>#include <string>using namespace std;//构建next最长前缀数组int* getNextArray(const string &sub){ if(sub.length() == 1) {//只有一个字符 return new int[1] {-1}; } int* ne...
2018-09-25 22:20:49
274
原创 Accelerated C++ —— 简易版std::vector类的实现
#include <memory>#include <iostream>#include <algorithm>namespace Ming { template<class T> class vec { public: typedef T* iterator; typedef const T* const_iterator;...
2018-09-12 18:34:32
380
原创 剑指offer——不用加减乘除做加法(按位与和异或)
class Solution {public: int Add(int num1, int num2) { while(num2 != 0){//若需要进位 int sum = num1 ^ num2;//异或,01=1,00=0,11=0【求得相加数,需要进位的直接取0,相当于11=0】 int carry = ...
2018-09-07 11:58:07
291
原创 剑指offer——正则表达式匹配(递归调用)
当模式中的第二个字符不是“*”时:1、如果字符串第一个字符和模式中的第一个字符相匹配,那么字符串和模式都后移一个字符,然后匹配剩余的。2、如果 字符串第一个字符和模式中的第一个字符相不匹配,直接返回false。而当模式中的第二个字符是“*”时:如果字符串第一个字符跟模式第一个字符不匹配,则模式后移2个字符,继续匹配。如果字符串第一个字符跟模式第一个字符匹配,可以有3种匹配方式:...
2018-09-06 10:36:40
288
原创 剑指offer——重建二叉树(先序后序求解树)
```class Solution {private: TreeNode * getTheTree(vector<int>& pre, vector<int>& vin, int pi, int pj, int vi, int vj) { if (pi > pj || vi > vj)return nullptr;...
2018-09-04 12:05:39
219
原创 LeetCode 128.最长连续序列(Longest Consecutive Sequence)【并查集】【HashMap技巧】
中等难度题吧,不算hard题,需要了解并查集用法将连续的数字进行合并成一个集合,最后看所有集合中哪个集合数目最多(或者直接边合并边记录最大值)#include &lt;vector&gt;#include &lt;algorithm&gt;#include &lt;unordered_map&gt;#include &lt;set&gt;#include &am
2018-08-09 16:59:49
1164
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人