<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[esjiang的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/esjiang</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; esjiang]]></copyright><item><title><![CDATA[Unreal Engine Siki 飞机大作战P7-P14(bug版本）]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/118856769</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/118856769</guid><author>esjiang</author><pubDate>Sat, 17 Jul 2021 14:56:32 +0800</pubDate><description><![CDATA[spaceship.h
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Pawn.h"
#include "Engine/World.h"
#include "Spaceship.generated.h"

class USphereComponent;
class UCa]]></description><category></category></item><item><title><![CDATA[Unreal engine Siki飞机大作战 P1-P7]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/118598237</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/118598237</guid><author>esjiang</author><pubDate>Sat, 17 Jul 2021 08:37:31 +0800</pubDate><description><![CDATA[#include &lt;glad/glad.h&gt;
#include &lt;GLFW/glfw3.h&gt;

#include &lt;iostream&gt;

#include "shader_s.h"

void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
    glViewport(0, 0, width, height);
}

void processInput(GLFWwindow* ]]></description><category></category></item><item><title><![CDATA[Week 25. 第600-628题]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/116070167</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/116070167</guid><author>esjiang</author><pubDate>Fri, 23 Apr 2021 20:44:10 +0800</pubDate><description><![CDATA[611. 有效三角形的个数
分析

先将数组排序, 排完序后, 先固定A, B, 然后考虑C
因为三角形需要满足任意两边之和大于第三边
A + B &gt; C, A + C &gt; B 必然满足
所以只需要满足 B + C &gt; A, 即 C &gt; A - B
可以用双指针 扫描到最大的k, 是的 C &gt; A - B
那么C 可以取的范围是[k, j - 1], 所以有j - 1 - k + 1 = j - k种
code
class Solution {
public:
    int ]]></description><category></category></item><item><title><![CDATA[《一周学完光线追踪》学习 九 电介质材料]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115444500</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115444500</guid><author>esjiang</author><pubDate>Mon, 05 Apr 2021 16:47:21 +0800</pubDate><description><![CDATA[camer.h
#pragma once
#ifndef __CAMERA_H__
#define __CAMERA_H__

#include "ray.h"

class camera {
public:
	camera() {
		lower_left_corner = vec3(-2.0, -1.0, -1.0);
		horizontal = vec3(4.0, 0.0, 0.0);
		vertical = vec3(0.0, 2.0, 0.0);
		origin = vec3(0.0, 0.]]></description><category></category></item><item><title><![CDATA[《一周学完光线追踪》学习 七 漫反射材料]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115428072</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115428072</guid><author>esjiang</author><pubDate>Sun, 04 Apr 2021 13:57:10 +0800</pubDate><description><![CDATA[camera.h
#pragma once
#ifndef __CAMERA_H__
#define __CAMERA_H__

#include "ray.h"

class camera {
public:
	camera() {
		lower_left_corner = vec3(-2.0, -1.0, -1.0);
		horizontal = vec3(4.0, 0.0, 0.0);
		vertical = vec3(0.0, 2.0, 0.0);
		origin = vec3(0.0, 0]]></description><category></category></item><item><title><![CDATA[《一周学完光线追踪》学习 六 抗锯齿]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115420827</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115420827</guid><author>esjiang</author><pubDate>Sun, 04 Apr 2021 10:24:17 +0800</pubDate><description><![CDATA[Camer.h
#pragma once
#ifndef __CAMERA_H__
#define __CAMERA_H__

#include "ray.h"

class camera {
public:
	camera() {
		lower_left_corner = vec3(-2.0, -1.0, -1.0);
		horizontal = vec3(4.0, 0.0, 0.0);
		vertical = vec3(0.0, 2.0, 0.0);
		origin = vec3(0.0, 0.]]></description><category></category></item><item><title><![CDATA[《一周学完光线追踪》学习 五 表面向量和多个物体]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115420099</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115420099</guid><author>esjiang</author><pubDate>Sat, 03 Apr 2021 20:18:02 +0800</pubDate><description><![CDATA[hitable.h
#pragma once
#ifndef __HITABLE__H__
#define __HITABLE__H__

#include "ray.h"

struct hit_record {
	float t;
	vec3 p;
	vec3 normal;
};
class hitable {
public:
	virtual bool hit(const ray&amp; r, float t_min, float t_max, hit_record&amp;rec)const =]]></description><category></category></item><item><title><![CDATA[《一周学完光线追踪》学习 二 Vector3类的使用]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115412808</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115412808</guid><author>esjiang</author><pubDate>Sat, 03 Apr 2021 09:49:17 +0800</pubDate><description><![CDATA[vector3.h
#ifndef VECTOR3_H
#define VECTOR3_H



#include &lt;math.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;assert.h&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;




class Vector3 {
public:

	Vector3() { e[0] = 0; e[1] = 0; e[2] = 0; }
	Vecto]]></description><category></category></item><item><title><![CDATA[《一周学完光线追踪》学习 一 建立工程文件]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115412669</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115412669</guid><author>esjiang</author><pubDate>Sat, 03 Apr 2021 09:35:55 +0800</pubDate><description><![CDATA[#define GLUT_NO_LIB_PRAGMA
#pragma comment (lib, "opengl32.lib")  /* link with Microsoft OpenGL lib */
#pragma comment (lib, "glut64.lib")    /* link with Win64 GLUT lib */
#include &lt;stdlib.h&gt;
#include "glut.h"
#include "glext.h"

#define WIDTH 512
#]]></description><category></category></item><item><title><![CDATA[Week 13. 第301-315题]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115367288</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115367288</guid><author>esjiang</author><pubDate>Thu, 01 Apr 2021 09:55:49 +0800</pubDate><description><![CDATA[301. 删除无效的括号
分析
从前往后扫描, 遇到(就让左括号数量++; 如果遇到), 让右括号数量++
l, r表示多余的左右括号数量
code
class Solution {
public:
    vector&lt;string&gt; ans;

    vector&lt;string&gt; removeInvalidParentheses(string s) {
        int l = 0, r = 0;
        for (auto x : s) 
           ]]></description><category></category></item><item><title><![CDATA[Lecture3 Real-time Shadows 1]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115336583</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115336583</guid><author>esjiang</author><pubDate>Tue, 30 Mar 2021 23:42:32 +0800</pubDate><description><![CDATA[P1 lecture 123:00 开始介绍虚幻引擎5原理 - 顾险峰 - 计算共形几何
从shaow mapping的基本知识上开始说, 然后在games101里面提到shadow mapping基本是怎么做的, 然后会在这节课里, 会多分析它(shadow mapping)的问题, 以及它对应的解决方式, 相当于是把硬阴影的绘制说清楚
然后回顾一下  shadow mapping背后的数学原理, 包括实时渲染, 离线渲染之间的基本的联系


percentage closer soft shadows(]]></description><category></category></item><item><title><![CDATA[Week 4]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115275619</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115275619</guid><author>esjiang</author><pubDate>Sun, 28 Mar 2021 08:25:09 +0800</pubDate><description><![CDATA[1353. 滑雪场设计
分析
所有输入的山峰高度都在[0, 100]
最优解里, 修改完后的山峰高度是否会存在&lt;0或者&gt;100的山峰高度
直觉上讲, 是不可能的
证明:
假设在最优解里面, 某个山峰的高度&lt;0, 因为最优解保证所有山峰高度差在17以内

我们可以将这些山峰移动到以0为起始的位置, 在我们假定的最优解里是将后面的值变到&lt;0的位置


将山峰按照棕色线变化, 那么代价会变得更小, 最终会将所有山峰变到0这个位置, 它也是一个合法的方案, 并且也是更好的方案, 与&lt;0]]></description><category></category></item><item><title><![CDATA[1.2.2 最长上升子序列模型（二）]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115273639</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115273639</guid><author>esjiang</author><pubDate>Sat, 27 Mar 2021 23:04:49 +0800</pubDate><description><![CDATA[1010. 拦截导弹
分析
就是最长不上升子序列
再加一问，最少需要几套系统才能拦截所有导弹？
贪心：
从前往后扫描每个数，对于每个数：
情况1：如果现有子序列结尾都小于当前数，则创建新的子序列
情况2：将当前数放在结尾大于等于它的最小的子序列后面。
code(第二问贪心)

#include &lt;iostream&gt;
using namespace std;
const int N = 1010;
int a[N], f[N], n, g[N];

int main(){
    while (c]]></description><category></category></item><item><title><![CDATA[Week 13. 第283-300题]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115265627</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115265627</guid><author>esjiang</author><pubDate>Sat, 27 Mar 2021 15:33:59 +0800</pubDate><description><![CDATA[283. 移动零
分析
双指针算法
如果x不是0, 就放到当前位置上, 当前位置++
扫描一遍完后, 将后面的所有数字置0
code
class Solution {
public:
    void moveZeroes(vector&lt;int&gt;&amp; nums) {
        int k = 0;
        for (auto&amp; x : nums) 
            if (x) nums[k ++ ] = x;
        while (k &lt; nu]]></description><category></category></item><item><title><![CDATA[Week 12. 第260-282题]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115219808</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115219808</guid><author>esjiang</author><pubDate>Thu, 25 Mar 2021 21:53:30 +0800</pubDate><description><![CDATA[260. 只出现一次的数字 III
分析
同剑指offer73
code
class Solution {
public:
vector singleNumber(vector&amp; nums) {
int sum = 0;
for (auto&amp; x : nums) sum ^= x;
int k = 0;
while (!(sum &gt;&gt; k &amp; 1)) k ++;
int first = 0;
for (auto&amp; x : nums)
if (x &gt;&gt; ]]></description><category></category></item><item><title><![CDATA[Week2]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115192424</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115192424</guid><author>esjiang</author><pubDate>Thu, 25 Mar 2021 07:53:27 +0800</pubDate><description><![CDATA[191. 位1的个数(3月22日)
分析
lowbit
code
class Solution {
public:
    int hammingWeight(uint32_t n) {
        int res = 0;
        while (n) res ++, n -= n &amp; (-n);
        return res;
    }
};

85. 不用加减乘除做加法(3月22日)
分析
将加法拆开: 不进位 + 进位
不进位的话 = 异或和
进位的话 就是算 (num1]]></description><category></category></item><item><title><![CDATA[Week 12. 第235-258题]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115109133</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115109133</guid><author>esjiang</author><pubDate>Tue, 23 Mar 2021 11:46:35 +0800</pubDate><description><![CDATA[235. 二叉搜索树的最近公共祖先
分析
分情况, 3种情况
如果p, q在两边, 那么lca就是根节点
如果p, q在左边, 那么递归到左子树, 那么递归到左子树(因为变成了相同的问题)
如果p, q在右边, 那么递归到右边
每次递归只会递归一个分支, 因此递归最大深度就是树的高度, 时间复杂度O(h), h是树的高度
提高班LCA
正规的lca O(logn)
离线做法O(1)
code
/**
 * Definition for a binary tree node.
 * struct TreeNo]]></description><category></category></item><item><title><![CDATA[Week11. 第225-234题]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115104171</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115104171</guid><author>esjiang</author><pubDate>Tue, 23 Mar 2021 00:15:56 +0800</pubDate><description><![CDATA[225. 用队列实现栈
分析
压入
压入的话, 直接把5压入队列
弹出
弹出的话, 按照栈的弹出方式, 应该将5弹出, 但是我们按照队列的话, 会把1弹出去
所以我们先想办法把5找到, 再把5弹出去

所以这里我们需要用一个额外的缓存的点, 先将1234从队列里弹出来, 然后存起来
然后队列里就不存在1234了
然后这样的话, 5就找到了, 将5弹出来, 弹完之后,
我们将1234 放回去
这个缓存的数据结构也是队列
所以我们从缓存中往外去弹, 也是1234往外去弹
因此再把1234顺次放到队列就可以了

]]></description><category></category></item><item><title><![CDATA[shellmad-25_C++新特性 强弱指针计数器增减分析]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115071011</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115071011</guid><author>esjiang</author><pubDate>Mon, 22 Mar 2021 12:25:56 +0800</pubDate><description><![CDATA[这节课讲讲
智能指针的计数器如何去管理的
以及我们自己来编写一个自己的有强弱指针关系的智能指针版本
具体而言:
按道理, 我们要跟踪源码, 为什么呢
因为我们要知道几个问题
何时我们的强指针次数会+1, 何时我们的弱指针次数会+1
我们需要去跟踪
这里我们提供跟踪的思路
强指针构造, 析构, =赋值, 拷贝构造等情况下, 计数器的变化
弱指针构造, 析构, =赋值, 拷贝构造等情况下, 计数器的变化
弱指针提升为强指针, 计数器变化

代码运行分析:
强指针构造的时候, 计数器变化情况
单步走, f5,
 ]]></description><category></category></item><item><title><![CDATA[shellmad-24_C++新特性 share_ptr与weak_ptr的源码分析]]></title><link>https://blog.youkuaiyun.com/esjiang/article/details/115062047</link><guid>https://blog.youkuaiyun.com/esjiang/article/details/115062047</guid><author>esjiang</author><pubDate>Mon, 22 Mar 2021 11:15:09 +0800</pubDate><description><![CDATA[深入分析shared_ptr与weak_ptr的实现
stl中使用了shared_ptr来管理一个对象的内部指针，并且使用了weak_ptr来防止前面所提到的shared_ptr循环引用的问题。
接下来简单的分析shared_ptr和weak_ptr的实现，最后通过自己写代码来模拟shared_ptr和weak_ptr，达到深入学习的目的：
测试代码如下：
#include "stdafx.h"
#include &lt;memory&gt;

int _tmain(int argc, _TCHAR* ar]]></description><category></category></item></channel></rss>