自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

朝气蓬勃

码农的自我修炼

  • 博客(147)
  • 资源 (2)
  • 收藏
  • 关注

原创 随机将线段分成N份的方法

随机将线段分成N份的方法前言一、实现方法二、代码验证提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档前言在开发一个特效shader 时, 需要把屏幕随机得划分成N*M的矩形格子, 并且每个格子的长L 在区间 【Lmin, Lmax】中, 宽W也在【Wmin, Wmax】中。考虑一维的情况即: 将长度为1 的线段划分为N份, 并且每一份的长度都在给定区间【min, max】之间。一、实现方法使用模拟法, 先确定一个随机范围, 然后随机一段, 截取后, 再随机下一段, 以此类推。

2021-07-18 21:21:18 959

翻译 LeetCode Missing Number ,SingleNumber I II III

问题Given an array of integers, every element appears twice except for one. Find that single one.解法class Solution {public: int singleNumber(vectorint>& nums) { int n = 0;

2016-09-01 22:50:17 326

原创 hiho 113 Fibonacci

问题描述给定一个数组,其中数子小于10000, 求fibonacci 子串的个数。解法容易想到如果当前数字是fibonacci数列中的一个,那么以其结尾的fibonacci 子串个数为前一个fibonacci数字前一个的子串的个数。如果当前数字不是fibonacci 数列中的数字,则不需要考虑。代码#include <bits/stdc++.h>using namespace std;enum{

2016-08-28 22:07:13 482

转载 HiHo 112 Total Highway Distance

问题http://hihocoder.com/contest/hiho112/problem/1问题分析题目给定一课最小生成树,求所有节点对之间的距离,然后将所有距离相加之后的和。而且之后要修改一些边的权重,再查询距离。 很容易想到一个方法是:统计每条边会被用到几次,最终答案就是 每条边的权重*用到的次数 然后所有边求和。 由于树的形状是不变的,因此每条边被用到的次数是可以复用。每次修改边的长度后

2016-08-28 20:32:46 451

转载 Leetcode 143. Reorder List

问题https://leetcode.com/problems/reorder-list/解法step 1, 将链表分成两份, step 2, 将后一半链表逆序 step 3, 合并两个链表。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;

2016-08-17 22:09:18 251

转载 Leetcode 135. Candy

问题https://leetcode.com/problems/candy/解法class Solution {public: int candy(vector<int>& ratings) { if (ratings.size() < 2) return ratings.size(); vector<int> num(ratings

2016-08-17 21:28:31 292

翻译 LeetCode 134. Gas Station

问题https://leetcode.com/problems/gas-station/解法首先有两个性质: 1, If car starts at A and can not reach B. Any station between A and B can not reach B.(B is the first station that A can not reach.)

2016-08-17 20:32:11 225

原创 LeetCode 140. Word Break II

问题https://leetcode.com/problems/word-break-ii/解法dp , 状态dp[i] = true 表示s.substr(i) 是能被分开. 递推公式为: dp[i] = dp[i+1] && InDict(s.substr(i, 1)) || dp[i+2] && InDict(s.substr(i, 2)) … 当求出dp[] 数组后, 可以使用dfs 查

2016-08-09 23:26:50 373

转载 leetCode . Binary Tree Inorder/ Preorder/ Post Traversal iteratively

问题https://leetcode.com/problems/binary-tree-inorder-traversal/解法http://www.cnblogs.com/AnnieKim/archive/2013/06/15/morristraversal.html

2016-06-14 11:23:15 250

原创 Leetcode 87. Scramble String

问题https://leetcode.com/problems/scramble-string/解法1递归 时间复杂度O(n^n)?class Solution {public: bool isScramble(string s1, string s2) { if (s1.size() != s2.size()) return false;

2016-06-13 21:57:08 217

转载 LeetCode 89. Gray Code

问题https://leetcode.com/problems/gray-code/解法class Solution {public: vector<int> grayCode(int n) { vector<int> ret; for (int i=0; i< (1<<n); ++i) { ret.push_back

2016-06-13 20:39:17 220

原创 Leetcode 85. Maximal Rectangle

问题https://leetcode.com/problems/maximal-rectangle/解法1转换成LeetCode 84 Largest Rectangle in Histogram 枚举每一行, 统计每一列从当前行向上连续1 的个数作为高度, 然后每一行使用84 中的算法求得最大矩形。 矩形为n行*m列 时间复杂度O(n*m), 空间复杂度O(m);class Solution

2016-06-13 19:21:30 351

原创 LeetCode 84 Largest Rectangle in Histogram

问题https://leetcode.com/problems/largest-rectangle-in-histogram/解法1枚举法, 时间复杂度O(n^2)// TLEclass Solution {public: int largestRectangleArea(vector<int>& heights) { int ret = 0; for (

2016-06-13 17:32:19 278

原创 leetcode 90. Subsets II

问题https://leetcode.com/problems/subsets-ii/解法回溯法, 首先不考虑重复的出现的情况, 那么就是列举C(n, 0), C(n, 1), C(n, 2) … C(n, n); C(n, k) 可以使用递归求解, 每一层决定一个数字,最多递归k层。每层枚举使用的数字。 接着考虑有重复的情况, 首先将输入数字排序, 使得相同数字在一起, 然后在枚举时,我们制定

2016-06-08 15:30:05 242

转载 LeetCode 76. Minimum Window Substring

问题https://leetcode.com/problems/minimum-window-substring/解法滑动窗口, 首先记录每个字符在t中出现的次数。 在s中移动窗口的右侧, 每次进入窗口的字符,其计数器减1, 如果该字符在t中出现,则总的计数器减一, 如果总的计数器为0 则表示窗口内的字符包含t,此时再将窗口的左侧前移, 每移一位, 对应字符的计数器加1, 如果计数器大于1, 则

2016-06-04 21:55:53 285

原创 leetCode 72. Edit Distance

问题https://leetcode.com/problems/edit-distance/解法考虑从单词后面向前修改word1, 设置状态f(i, j) 表示将word1 【0~i】修改为word2 【0~j】所需要的次数。 有三种对应的修改方法, 状态转移方程为 f(i, j) = f(i-1, j-1) +1 //如果word1[i] != word2[j] 修改 f(i, j) = f

2016-06-04 18:07:22 291

转载 leetcode 73. Set Matrix Zeroes

问题https://leetcode.com/problems/set-matrix-zeroes/解法将列中有0 的信息存储在一行中, 这行满足存在一个元素为0; 接着先将存在0的行全部改为0, 再根据存储的每列信息,将有0的列置为0;class Solution {public: void setZeroes(vector<vector<int>>& matrix) {

2016-06-04 01:11:52 308

原创 LeetCode 65 Valid Number

问题https://leetcode.com/problems/valid-number/解法构造状态转移表, 根据输入转移class Solution {public: Solution() { memset(stateTable, 0, sizeof(stateTable)); stateTable[Start_s][Blank] = Start

2016-05-30 21:41:43 426

原创 cmake 资料

介绍 https://blog.kitware.com/meta-configuration-of-cc-projects-with-cmake/

2016-05-28 12:04:34 288

原创 visual studio 运行框一闪而过

问题每次使用visual studio 运行程序时, 程序结束后,黑框一闪而过, 老师教我们的方法是在程序结尾处加上getchar(); system(“pause”) 之类的语句使得程序暂停。这难道是微软的bug?解决方法其实这个问题是我每次运行程序时都点击开始调试按钮, 正确的做法是点击 调试-》 开始执行(不调试) 快捷键 Ctrl + F5 这样每次程序结束时,黑框不会闪退。

2016-05-27 18:29:24 856

原创 纹理贴图

问题openGL 纹理贴图相关。1, 纹理坐标纹理坐标按线性插值, 注意透视投影矫正( 纹理坐标插值时, 是在屏幕空间进行的, 而纹理坐标是在三维空间中可以进行线性插值的) 。2, 纹理参数Wrapping– 环绕方式,可以选择repeat, 或clamp filter – 纹理滤波方式, 基本选项有三种NEAREST,LINEAR, 和 anisotropic NEAREST:

2016-05-26 16:37:45 604 1

原创 LeetCode 63. Unique Paths II

问题https://leetcode.com/problems/unique-paths-ii/解法dp 公式为 f(i, j) = f(i, j+1) + f(i-1, j) obstacleGrid[i][j] == 0; f(i, j) = 0 obstacleGrid[i][j] == 1class Solution {public: int uni

2016-05-22 22:16:27 215

原创 LeetCode 62. Unique Paths

问题求组合数C(n, m);解法使用递推公式 C(n, m) = C(n-1, m-1) + C(n-1, m); 理解: 从n个元素中取出m个元素, 考虑存在一个特殊元素,第一类取法不包括特殊元素则从其他元素中拿m个,有C(n-1, m) 种方案, 第二类取法包括特殊元素则从其他元素中拿m-1个有C(n-1, m-1)种方案。 边界条件: 规定C(n, 0) = 1;class Solutio

2016-05-22 00:01:12 217

转载 hiho 98 搜索一 24点

问题给定四个数, 使用加减乘除四中操作, 得到24, 每个数只能使用一次。解法暴力枚举法, http://hihocoder.com/contest/hiho98/problem/1##include <bits/stdc++.h>using namespace std;int a[4];enum{add=0, sub, mul, divid, rsub, rdiv, OPNUM};int

2016-05-21 13:25:21 332

原创 OpenGL相机控制

这里只考虑modelview 矩阵的生成,和如何使用鼠标键盘控制相机,完成在场景中的漫游。OpenGL相机可以使用两个参数表示,相机在世界坐标的位置pos 和 朝向 v。移动相机位置首先根据相机朝向v 和 相机的up (一般为y轴), 得到相机坐标轴在世界坐标的表示。此时要前,后,左,右,上,下移动相机,只需要pos + 每个轴移动的分量。改变相机朝向一般使用鼠标来控制相机朝向。鼠标在x轴上的移动改

2016-05-19 15:24:20 3460

原创 hiho 数位dp

问题http://hihocoder.com/problemset/problem/1301?sid=791127 数位dp + 二分查找。解法1, 数位dp 基本思路是: 对于一个小于n的数, 肯定是从高位到低位出现某一位 < n的那一位 如 n = 58 n为十进制数。 x = 48 此时x 的 十位 < n x = 51 此时x的个位 < n 有了上述性质,我们就

2016-05-08 15:40:45 202

转载 复数乘法与旋转

问题复数乘法可以表示为向量旋转的证明。证明a+bi=r(cosA+i∗sinA)a+bi = r(cosA+i*sinA) c+di=q(cosB+i∗sinB)c+di = q(cosB+i*sinB) 相乘 =rq[(cosA+i∗sinA)∗(cosB+i∗sinB)]= rq[(cosA+i*sinA) * (cosB+i*sinB)] (cosA+i∗sinA)∗(cosB+i∗si

2016-05-05 20:13:52 5894

原创 hiho 55 连通性·四

问题http://hihocoder.com/problemset/problem/1190?sid=787105 求点的连通分量解法使用tarjan,用堆栈记录边,在割点处弹栈,注意边可能有两次进入堆栈,我们记录边是否已经进入堆栈。#include <bits/stdc++.h>using namespace std;enum{maxn = 20000+5, maxm = 100000+5}

2016-05-03 22:43:34 234

转载 hiho 57 高斯消元 二

问题http://hihocoder.com/problemset/problem/1196?sid=785572解法转换成异或表达式, 然后使用高斯消元的到解。#include <bits/stdc++.h>using namespace std;enum{maxn = 30, n=5, m=6};int a[maxn][maxn];int b[maxn];int delt[5][2]

2016-04-29 23:14:43 200

原创 hiho 60. Permutation Sequence

问题https://leetcode.com/problems/permutation-sequence/解法复杂度o(n^2)class Solution {public: string getPermutation(int n, int k) { bool flag[n+1]; int f = 1; for (int i=1; i<=n;

2016-04-29 18:54:51 214

原创 leetcode 56. Merge Intervals

问题https://leetcode.com/problems/merge-intervals/解法首先按照start 排序, 逐个插入,如果与最后一个相交则合并,否则插入新节点。/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : s

2016-04-29 16:46:34 195

原创 Leetcode 57. Insert Interval

问题https://leetcode.com/problems/insert-interval/解法要插入的段 newInterval 与原有的intervals 会相互重叠一部分。 首先找到重叠的左右边界,插入即可。/** * Definition for an interval. * struct Interval { * int start; * int end;

2016-04-29 16:26:20 224

原创 hiho 54 连通性·三

问题http://hihocoder.com/contest/hiho54/problem/1解法首先使用tarjan 求出强连通分量,将强连通分量看做一个节点,就消除了图中的环, 然后使用拓扑排序寻找一条权值最大的路径。#include <bits/stdc++.h>using namespace std;enum{maxn = 20000+4};vector<int> G[maxn];v

2016-04-29 10:23:01 216

转载 hiho 53 连通性二·边的双连通分量

问题http://hihocoder.com/problemset/problem/1184?sid=785059解法Tarjan算法+ 栈#include <bits/stdc++.h>using namespace std;enum{maxn = 20000+4};vector<int> G[maxn];int n;int parent[maxn];int low[maxn];in

2016-04-28 21:59:41 272

转载 hiho 52 连通性一·割边与割点

问题http://hihocoder.com/problemset/problem/1183?sid=785036解法#include <bits/stdc++.h>using namespace std;enum{maxn = 20000+5};vector<int> G[maxn];int visit[maxn];int low[maxn];int dfn[maxn];int pa

2016-04-28 21:56:41 261

转载 hiho 51 欧拉路·三

问题http://hihocoder.com/problemset/problem/1182?sid=784688解法构造有向图,每条边表示0~2n−12^n-1 中的一个数,则求有向图的欧拉回路。 使用Fleury算法 后path倒序输出才是结果。#include <bits/stdc++.h>using namespace std;enum{maxn = 1<<15};int G[max

2016-04-28 21:54:02 243

转载 hiho 50 Fleury算法求欧拉路径

问题http://hihocoder.com/problemset/problem/1181?sid=784004解法伪代码DFS(u): While (u存在未被删除的边e(u,v)) 删除边e(u,v) DFS(v) End PathSize ← PathSize + 1 Path[ PathSize ] ← u#include <

2016-04-28 21:45:12 356

转载 hiho 49 欧拉路·一

问题http://hihocoder.com/problemset/problem/1176?sid=783791解法 给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,该条路称为欧拉路。 一个无向图存在欧拉路当且仅当该图是连通的且有且只有2个点的度数是奇数,此时这两个点只能作为欧拉路径的起点和终点。 若图中没有奇数度的点,那么起点和终点一定是同一个点,这样的欧拉路叫做欧拉

2016-04-28 21:41:08 238

原创 LeetCode 50. Pow(x, n)

问题https://leetcode.com/problems/powx-n/解法计算出2的幂次个x相乘的结果,然后将n分解成2的幂次,使用log(n)次即可求得结果。class Solution {public: double myPow(double x, int n) { if (x ==0.0 && n == 0) return 0.0/0.

2016-04-26 20:56:00 209

转载 LeetCode 49. Group Anagrams

问题https://leetcode.com/problems/anagrams/代码使用hash + set class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { unordered_map<string, multiset<string>> mp;

2016-04-26 20:30:20 187

3D数学基础 图形与游戏开发

《3D数学基础 图形与游戏开发》 作为一本3D图形学入门书籍,其语言简练,生动易懂。主要内容包括EulerAngle, Quaternion, Matrix, 并给出了C++ 实现。注意在翻译版中代码是有一些错误的,不能直接使用, 建议大家自己推导一遍。 该版本是黑白扫描版,不是很清晰,且翻译版的部分公式和代码有错误,请大家注意。

2017-01-02

空空如也

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

TA关注的人

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