随笔分类 -  code

刷题总结
摘要:图 一幅图是由节点和边构成的,逻辑结构如下: 所以图的逻辑结构为: /* 图节点的逻辑结构 */ class Vertex { int id; Vertex[] neighbors; } 一般边的表示,有两种实现方式,一种是邻接表,一种是邻接矩阵 邻接表很直观,我把每个节点 x 的邻居都存到一个列表 阅读全文
posted @ 2023-04-10 17:33 xiaoyu_jane 阅读(58) 评论(0) 推荐(0)
摘要:买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何 阅读全文
posted @ 2023-04-06 17:26 xiaoyu_jane 阅读(39) 评论(0) 推荐(0)
摘要:贪心和动态规划的区别 有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿? 【贪心】 -- 指定每次拿最大的,最终结果就是拿走最大数额的钱。(每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优) 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满? -- 如果还每次选最大的 阅读全文
posted @ 2023-03-29 18:57 xiaoyu_jane 阅读(112) 评论(0) 推荐(0)
摘要:了解动态规划 动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法,只不过在计算机问题上应用比较多,比如说让你求最长递增子序列呀,最小编辑距离呀等等 求解动态规划的核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值。需要你熟练掌握递归思维,只有列出正确的 阅读全文
posted @ 2022-11-16 09:33 xiaoyu_jane 阅读(47) 评论(0) 推荐(0)
摘要:数字转字符串 String.valueOf(num) 字符串转数字 Integer.parseInt(string) 阅读全文
posted @ 2022-10-16 22:48 xiaoyu_jane 阅读(22) 评论(0) 推荐(0)
摘要:将集合或者数组转化为流,进行求最大值,排序,可以省去for循环,简化代码量 Arrays.stream(res).max().getAsInt() 可以得到res数组的最大值 Arrays.stream(res).sorted().boxed().collect(Collectors.toList( 阅读全文
posted @ 2022-10-11 19:50 xiaoyu_jane 阅读(730) 评论(0) 推荐(0)
摘要:回溯算法也叫回溯搜索法,其本质是穷举,也可以加上剪枝操作进行优化 回溯是递归的副产品,只要有递归就存在回溯的思想 回溯算法可以抽象为树形结构 回溯法解决如下问题: 组合问题,无序 排列问题,有序 切割问题 子集问题 棋盘问题 回溯算法套路 void backtracking(参数){ //终止条件 阅读全文
posted @ 2022-10-05 19:07 xiaoyu_jane 阅读(33) 评论(0) 推荐(0)
摘要:树的中序遍历有三种解法,包括: 递归 (好理解,代码简单,但效率不高) 借助栈的迭代方法 莫里斯遍历 1.递归 List<Integer> res = new ArrayList<>(); //前序 public List<Integer> preorderTraversal(TreeNode ro 阅读全文
posted @ 2022-10-05 14:08 xiaoyu_jane 阅读(68) 评论(0) 推荐(0)
摘要:队列的定义 Queue的实现类有LinkedList和PriorityQueue 最常用的实现类是LinkedList 队列通常(先进先出)的方式排序各个元素,在 FIFO 队列中,所有的新元素都插入队列的末尾。 其他种类的队列可能使用不同的元素放置规则。每个 Queue 实现必须指定其顺序属性。如 阅读全文
posted @ 2022-10-04 13:01 xiaoyu_jane 阅读(33) 评论(0) 推荐(0)
摘要:官方定义的栈使用 两种定义stack的方法: 一种是使用系统自带的Stack,具有线程安全性; 另一种是使用Deque(双端队列),是官方较为推荐的,其有ArrayDeque和LinkedList这两种实现类 Deque实现类是LinkedList、ArrayDeque、LinkedBlocking 阅读全文
posted @ 2022-10-03 11:57 xiaoyu_jane 阅读(44) 评论(0) 推荐(0)
摘要:十进制的int类型转变为字符串形式的二进制,如2->"10" Integer.toString(number,2); //十进制转换为二进制 其中number为十进制的类型 Integer.toBinaryString(number) //十进制转换为二进制` 其中number为十进制的类型 字符串 阅读全文
posted @ 2022-10-02 13:09 xiaoyu_jane 阅读(199) 评论(0) 推荐(0)
摘要:按位异或(二进制的运算) 当前bit位的两个二进制表示不同则为1,相同则为0。 该方法被广泛推广用来统计一个数的1的位数 即: 0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0 按位异或的三个特点: (1) 0^0=0,0^1=1 0异或任何数=任何数 (2) 1^0=1,1^1 阅读全文
posted @ 2022-10-02 11:29 xiaoyu_jane 阅读(76) 评论(0) 推荐(0)
摘要:数组和链表的区别 数组:所有元素都连续的存储于一段内存中,且每个元素占用的内存大小相同。 数组具备了通过下标快速访问数据的能力 增加数组容量需要先申请一块新的内存,然后复制原有的元素。如果需要的话,可能还要删除原先的内存。 删除元素时需要移动被删除元素之后的所有元素以保证所有元素是连续的 增加元素时 阅读全文
posted @ 2022-10-01 11:04 xiaoyu_jane 阅读(54) 评论(0) 推荐(0)
摘要:1.hashMap赋值的简便方法 for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (maps.containsKey(c)) maps.put(c,maps.get(c)+1); else maps.put(c,1); 阅读全文
posted @ 2022-09-30 18:29 xiaoyu_jane 阅读(79) 评论(0) 推荐(0)
摘要:这是力扣刷题中很经典的一个套路,类似有: 以下标i为标准,其之前最长的非递增序列的个数 以下标i为标准,其之后的最长非递减序列的个数 //以下标i为标准,其之前最长的非递增序列的个数 int[] res = new int[nums.length]; //下标i之前的k个元素是非递增的线段数 。 f 阅读全文
posted @ 2022-09-30 12:14 xiaoyu_jane 阅读(22) 评论(0) 推荐(0)
摘要:剪枝操作可以去除重复无意义的操作,从而提升时间复杂度和空间复杂度 剪枝的常见思路: 排序和去重,这里常见Arrays.sort(nums) HashSet<>() 提前结束循环或者跳出循环 以力扣上的2344题为例: https://leetcode.cn/problems/minimum-dele 阅读全文
posted @ 2022-09-27 17:31 xiaoyu_jane 阅读(51) 评论(0) 推荐(0)
摘要:掌握顺序数组的去重,对后续算法的去重剪枝,降低时间复杂度很有用,其基本思路如下: 1.双指针,k和i。其中k指向不重复的位置,i为数组的遍历指针 2.对数组进行遍历,其中i可以从1开始,k从0开始 3.比较nums[k]和nums[i]: 如果两者相同,移动i,k不变 如果两者不同,移动k,nums 阅读全文
posted @ 2022-09-27 14:55 xiaoyu_jane 阅读(39) 评论(0) 推荐(0)
摘要:给一个字符串数组,如:String[] nums={"102","473","251","814"}; 请进行基数排序,返回 List<List> list, 其中List的index为基数位数,从0开始表示个位。index对应的list内容为截取的该位数的nums(如十位,则nums为 02,73 阅读全文
posted @ 2022-09-26 19:55 xiaoyu_jane 阅读(28) 评论(0) 推荐(0)
摘要:刷题过程中会遇到List<List>的数据结构,以下展示定义和操作的过程 @Test public void ListTest(){ List<List<Integer>> res = new ArrayList<>(); System.out.println(res); // [] //添加第一个 阅读全文
posted @ 2022-09-26 15:38 xiaoyu_jane 阅读(122) 评论(0) 推荐(0)
摘要:数组插入-从后往前的思想 合并数组的思想体现了数据结构中关于插入的问题,学习数据结构的时候,我们知道: 数组插入,时间复杂度为o(n),需要移动后面的所有元素,而链表则不用 如果遇到了数组插入的题目,我们不妨使用从后往前的寻找对应元素的位置,而避免元素的移动 力扣中经典的合并数组: 给你两个按 非递 阅读全文
posted @ 2022-09-26 14:50 xiaoyu_jane 阅读(39) 评论(0) 推荐(0)