- 博客(389)
- 收藏
- 关注
原创 MySoftRenderer:C++ 自制软渲染器
Github 项目传送门项目介绍基于 C++ 和 Win32 API 实现了简单的软渲染器,可用 Visual Studio 2019 编译运行。实现的主要功能包括:3D 数学库:三维向量、四维向量、四维矩阵渲染管线:顶点 MVP 变换、背面剔除、裁剪、光栅化、透视矫正、纹理过滤、漫反射光照计算等相机控制:类似 FPS 游戏的控制方式,鼠标旋转镜头,WASD 平移,QE 上下帧率显示支持读入 obj 格式的模型两种渲染模式:线框、纹理贴图线框模式:纹理贴图模式:我在学习了 G
2021-09-09 23:11:23 1123
原创 算法笔记练习 题解合集
说明带链接的小节标题是该链接对应的 codeup 地址第 3 章 入门篇(1)——入门模拟3.6 字符串处理问题 A: 字符串连接问题 B: 首字母大写问题 C: 字符串的查找删除问题 D: 单词替换问题 E: 字符串去特定字符问题 F: 数组逆置问题 G: 比较字符串问题 H: 编排字符串问题 I: 【字符串】回文串第 4 章 入门篇(2)——算法初步4.1 ...
2020-03-27 13:01:36 3977 1
原创 【Unity开发总结】以屏幕为中心的地图移动和放缩
Unity 中实现类似地图 APP 的地图移动和放缩,放缩时要以屏幕而不是整张图为中心。
2022-08-27 18:56:56 1941 3
原创 Leetcode 2022. 将一维数组转变成二维数组
本题链接题目给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和 n 。你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组。original 中下标从 0 到 n - 1 (都 包含 )的元素构成二维数组的第一行,下标从 n 到 2 * n - 1 (都 包含 )的元素构成二维数组的第二行,依此类推。请你根据上述过程返回一个 m x n 的二维数组。如果无法构成这样的二维数组,请你返回一个空的二维数组。示例 1:输入:original = [
2022-01-01 01:10:08 566
原创 Leetcode 208. 实现 Trie (前缀树)
本题链接题目Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。boolean star
2021-12-30 20:47:02 189
原创 Leetcode 146. LRU 缓存机制
本题链接题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新
2021-11-12 15:29:15 293
原创 【C++】new 和 malloc 的区别
1 关于 new参考:【C++】new和malloc的区别个人面经1:C++C++ Primer 中文版(第 5 版)
2021-10-15 22:04:35 235
原创 C++ Primer 中文第 5 版练习答案 第 15 章 面向对象程序设计(1~27)
C++ Primer 中文版(第 5 版)练习解答合集自己写的解答,如有错误之处,烦请在评论区指正!1对于某些成员,基类希望它的派生类各自定义适合自身的版本(而不是不作改变直接继承),此时基类就将这些成员定义成虚成员。2对于 protected,派生类有权访问,但是其他用户无法访问对于 private,派生类和其他用户都无法访问3#pragma once#include <iostream>using std::ostream;using std::endl;#incl
2021-10-13 21:57:59 329
原创 Leetcode 121. 买卖股票的最佳时机
本题链接题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
2021-10-01 23:58:06 134
原创 C++ Primer 中文第 5 版练习答案 第 14 章 操作重载与类型转换(1~53)
C++ Primer 中文版(第 5 版)练习解答合集自己写的解答,如有错误之处,烦请在评论区指正!1相同点:参数数量和内置运算符相同优先级、结合性和内置运算符相同不同点:重载的运算符要么是类的成员,要么至少含有一个类类型的参数重载的 &&、|| 不保证短路求值2#pragma once#include <iostream>using std::istream;using std::ostream;using std::endl;#in
2021-09-23 22:47:09 278
原创 C++ Primer 中文第 5 版练习答案 第 13 章 拷贝控制(33~58)
C++ Primer 中文版(第 5 版)练习解答合集自己写的解答,如有错误之处,烦请在评论区指正!33如果不使用引用类型的话,Folder 类的对象可能很大,实参到形参的拷贝会影响性能。不用 const 是因为在函数内部需要对 Folder 对象进行修改34#include <iostream>using std::cout;using std::endl;#include <string>using std::string;#include <set&
2021-09-20 23:33:25 339
原创 C++ Primer 中文第 5 版练习答案 第 13 章 拷贝控制(1~32)
C++ Primer 中文版(第 5 版)练习解答合集自己写的解答,如有错误之处,烦请在评论区指正!1如果构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。以下情况会用到拷贝构造函数:拷贝初始化(用 = 初始化变量)将对象作为实参传递给一个非引用类型的形参从一个返回类型为非引用类型的函数返回一个对象用花括号列表初始化一个数组中的元素或一个聚合类中的成员初始化标准库容器或者调用其 push / insert 等操作时(empl
2021-09-15 17:22:16 295
原创 Leetcode 781. 森林中的兔子
本题链接题目森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。返回森林中兔子的最少数量。示例:输入: answers = [1, 1, 2]输出: 5解释:两只回答了 "1" 的兔子可能有相同的颜色,设为红色。之后回答了 "2" 的兔子不会是红色,否则他们的回答会相互矛盾。设回答了 "2" 的兔子为蓝色。此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。因此森林中兔子的最少数量是 5
2021-09-14 19:32:57 150
原创 C++ Primer 中文第 5 版练习答案 第 12 章 动态内存
1都包含 4 个元素。实际上 b1 和 b2 的智能指针成员指向的是同一个 vector2// StrBlob.h#ifndef STRBLOB#define STRBLOB#include <stdexcept>#include <memory>#include <string> #include <vector>using std::vector;using std::string;using std::initializer_
2021-09-14 16:26:48 367
原创 Leetcode 200. 岛屿数量
本题链接题目给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1示例 2:输入:grid =
2021-09-14 02:34:18 194
原创 Leetcode 1221. 分割平衡字符串
本题链接题目在一个 平衡字符串 中,‘L’ 和 ‘R’ 字符的数量是相同的。给你一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。注意:分割得到的每个字符串都必须是平衡字符串。返回可以通过分割得到的平衡字符串的 最大数量 。示例 1:输入:s = "RLRRLLRLRL"输出:4解释:s 可以分割为 "RL"、"RRLL"、"RL"、"RL" ,每个子字符串中都包含相同数量的 'L' 和 'R' 。示例 2:输入:s = "RLLLLRRRLR"输出:3解释:s 可以分割为
2021-09-14 02:27:46 144
原创 Leetcode 54. 螺旋矩阵
本题链接题目给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]提示:m == matrix.lengthn == matrix[i].length
2021-09-14 02:22:01 189
原创 Leetcode 21. 合并两个有序链表
本题链接题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列来源
2021-09-14 02:11:48 124
原创 Leetcode 704. 二分查找
本题链接题目给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1提示:你可以假
2021-09-14 02:06:35 139
原创 Leetcode 415. 字符串相加
本题链接题目给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。示例 1:输入:num1 = "11", num2 = "123"输出:"134"示例 2:输入:num1 = "456", num2 = "77"输出:"533"示例 3:输入:num1 = "0", num2 = "0"输出:"0"提示:1 <= num
2021-09-14 02:01:38 154
原创 Leetcode 面试题 17.14. 最小K个数
本题链接题目设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。示例:输入: arr = [1,3,5,7,2,4,6,8], k = 4输出: [1,2,3,4]提示:0 <= len(arr) <= 1000000 <= k <= min(100000, len(arr))来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/smallest-k-lcci著作权归领扣网络所有。商业转载请联系官方
2021-09-14 01:53:20 189
原创 Leetcode 912. 排序数组
本题链接题目给你一个整数数组 nums,请你将该数组升序排列。示例 1:输入:nums = [5,2,3,1]输出:[1,2,3,5]示例 2:输入:nums = [5,1,1,2,0,0]输出:[0,0,1,1,2,5]提示:1 <= nums.length <= 50000-50000 <= nums[i] <= 50000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sort-an-array
2021-09-13 20:05:26 147
原创 Leetcode 143. 重排链表
本题链接题目给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln-1 → Ln请将其重新排列后变为:L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入: head = [1,2,3,4]输出: [1,4,2,3]示例 2:输入: head = [1,2,3,4,5]输出: [1,5,2,4,3]提示:链表的长度范围为 [1, 5 * 104]
2021-09-13 12:21:16 121
原创 Leetcode 25. K 个一组翻转链表
本题链接题目给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]示例 2:输入:head = [1,2,3,4,5], k = 3输出:[3,2
2021-09-13 12:12:32 156
原创 Leetcode 70. 爬楼梯
本题链接题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶来源:力扣(LeetCode)链接:https://lee
2021-09-13 11:59:41 129
原创 Leetcode 20. 有效的括号
本题链接题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:true提示:1 <
2021-09-13 11:40:09 100
原创 Leetcode 199. 二叉树的右视图
本题链接题目给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例 1:输入: [1,2,3,null,5,null,4]输出: [1,3,4]示例 2:输入: [1,null,3]输出: [1,3]示例 3:输入: []输出: []提示:二叉树的节点个数的范围是 [0,100]-100 <= Node.val <= 100来源:力扣(LeetCode)链接:https://leetcode-cn.
2021-09-13 11:34:47 122
原创 Leetcode 14. 最长公共前缀
本题链接题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。提示:1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英文字母组成来源:力
2021-09-13 11:31:47 96
原创 Leetcode 1190. 反转每对括号间的子串
本题链接题目给出一个字符串 s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结果中 不应 包含任何括号。示例 1:输入:s = "(abcd)"输出:"dcba"示例 2:输入:s = "(u(love)i)"输出:"iloveu"解释:先反转子字符串 "love" ,然后反转整个字符串。示例 3:输入:s = "(ed(et(oc))el)"输出:"leetcode"解释:先反转子字符串 "oc" ,
2021-09-13 10:49:27 220
原创 Leetcode 102. 二叉树的层序遍历
本题链接题目给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal
2021-09-13 00:41:42 179
原创 Leetcode 42. 接雨水
本题链接题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2:输入:height = [4,2,0,3,2,5]输出:9提示:n == height.length0 <= n &l
2021-09-13 00:28:08 129
原创 Leetcode 5. 最长回文子串
本题链接题目给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"示例 3:输入:s = "a"输出:"a"示例 4:输入:s = "ac"输出:"a"提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成来源:力扣(LeetCode)链接:https://leetcode-
2021-09-12 23:39:01 127
原创 Leetcode 1480. 一维数组的动态和
本题链接题目给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。示例 2:输入:nums = [1,1,1,1,1]输出:[1,2,3,4,5]解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1
2021-09-12 22:31:53 190
原创 Leetcode 45. 跳跃游戏 II
本题链接题目给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。示例 1:输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。示例 2:输入: nums = [2,3,0,1,4]输出: 2
2021-09-12 22:27:49 186
原创 Leetcode 740. 删除并获得点数
本题链接题目给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入:nums = [3,4,2]输出:6解释:删除 4 获得 4 个点数,因此 3 也被删除。之后,删除 2 获得 2 个点数。总共获得 6 个点数。示例 2:输入:nums
2021-09-11 20:04:13 252
原创 Leetcode 213. 打家劫舍 II
本题链接题目你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例 1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2),
2021-09-11 19:37:45 121
原创 Leetcode 198. 打家劫舍
本题链接题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。示例 2
2021-09-11 19:29:58 126
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人