数据结构和算法
数据结构和算法-从菜鸡到垃圾
新线君
平常心
展开
-
理解链表的内存中的结构
原创 2020-07-18 10:57:54 · 477 阅读 · 0 评论 -
递归的求和
//这种标记长度的方式 和求全排练的方式很像 //递归的求和 public int sum(int[] arr){ if(arr==null||arr.length==0){ return 0; } return sum(arr, 0); } public int sum(int[] arr,int l){ if(l==arr.length){ return原创 2020-07-02 20:37:21 · 741 阅读 · 1 评论 -
删除链表所有值为val的节点
题目 https://leetcode-cn.com/problems/remove-linked-list-elements/submissions/思路就是哨兵模式以及moveHead的使用 public ListNode removeElements(ListNode head, int val) { ListNode sentinel = new ListNode(-1); sentinel.next = head; ListNode moveN原创 2020-07-02 20:14:27 · 206 阅读 · 0 评论 -
寻找平衡点的俩种方法
o(n2)和o(n)//时间复杂度是nstatic void equPoint2(){ int[] arr = {2,3,4,5,8,5,9}; int leftSum = arr[0]; int rightSum = 0; for (int i : arr) { rightSum+=i; } for (int i =1; i < arr.length; i++) {原创 2020-07-01 10:10:38 · 2379 阅读 · 0 评论 -
TreeMap按照value排序
treemap默认是按照ket排序,底层红黑树实现public static void sortByValue() { Map<String,Integer> map = new TreeMap<String, Integer>(); map.put("a", 1); map.put("d", 2); map.put("b", 3); map.put("c",0); List<M原创 2020-06-28 09:35:37 · 474 阅读 · 0 评论 -
计算集合里全排列
public static void main(String[] args) { List list = new ArrayList(); list.add(1); list.add(2); list.add(3); for (int i = 0; i < list.size(); i++) { for (int j = 0; j < list.size(); j++) { for (int k = 0; k < list.size(); k++) {原创 2020-06-16 17:25:59 · 127 阅读 · 0 评论 -
返回俩个集合的元素组合
public static void main(String[] args) { List list1 = new ArrayList(); List list2 = new ArrayList(); list1.add(1);list1.add(2);list1.add(3); list1.add(3);list1.add(4);list2.add(6); for (int i = 0; i < list1.size(); i++) { for (int j = 0; ..原创 2020-06-16 17:16:26 · 216 阅读 · 0 评论 -
返回数组的所有元素的俩俩组合
public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); for (int i = 0; i < list.size(); i++) { for (int j = i+1; j < list.size(); j++) { System.out.println(原创 2020-06-16 17:12:05 · 569 阅读 · 0 评论 -
最大连续子数组和
题目连接 https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof方法一: 暴力法求解class Solution { public int maxSubArray(int[] arr) { int maxSum = Integer.MIN_VALUE; for (int i = 0; i < arr.length; i++) { for (int j = i; j < arr.原创 2020-06-12 14:18:07 · 124 阅读 · 0 评论 -
two sum
https://leetcode-cn.com/problems/two-sum/submissions/public int[] twoSum(int[] arr, int target){ if(arr==null){ return null; } Map<Integer,Integer> map = new HashMap(); for (int i = 0; i < arr.length; i++) { map.put(arr[i],i); }原创 2020-06-10 13:57:00 · 161 阅读 · 0 评论 -
翻转数组
public static void main(String[] args) { int[] arr = {1,2,3,4,5}; for (int i = 0; i < arr.length/2; i++) { int tmp = arr[i]; arr[i] = arr[arr.length-i-1]; arr[arr.length-i-1] = tmp; } for (int i : arr) { System.out.println(i); }原创 2020-06-10 10:31:55 · 133 阅读 · 0 评论 -
翻转数字
翻转数字 public static void main(String[] args) { System.out.println(reverseNum(-123)); } public static int reverseNum(int num){ if(num>Integer.MAX_VALUE||num<Integer.MIN_VALUE){ return 0; } int ret原创 2020-06-10 00:17:15 · 134 阅读 · 0 评论 -
排序算法整理
选择排序int[] arr = {22,12,3,4,1}; for (int i = 0; i < arr.length-1; i++) { for (int j = i+1; j <arr.length; j++) { if(arr[i]>arr[j]){ int tmp = arr[i]; arr[i] = arr[j];原创 2020-06-10 00:11:39 · 90 阅读 · 0 评论 -
剑指offer40. 最小的k个数
题目https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/思路分析典型的topk问题方法一全部排序后输出public int[] getLeastNumbers(int[] arr, int k) { if(arr==null){ return null; } List<Integer> list = new ArrayList() ; for (int i : arr)原创 2020-06-03 00:18:38 · 131 阅读 · 0 评论 -
剑指offer面试题28. 对称的二叉树
题目https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof/方案方法1、使用dfs 递归遍历 public boolean isSymmetric(TreeNode root) { if(root==null){ return true; } ...原创 2020-05-03 19:13:23 · 189 阅读 · 0 评论 -
剑指offer面试题27. 二叉树的镜像
题目https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/方法一(dfs):递归的交换俩个节点的值 示意图如下 public TreeNode mirrorTree(TreeNode root) { if(root==null){ return null; }...原创 2020-05-01 22:57:17 · 201 阅读 · 0 评论 -
剑指offer面试题26. 树的子结构
题目https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/思路要知道什么时候就是遍历成功了本题目就是子树为空说明都遍历匹配完成了还要明白子树可能是在左边 也可能是在右边,还可能是从根部出发的代码public boolean isSubStructure(TreeNode A, TreeNode B) { if(...原创 2020-04-30 23:10:43 · 124 阅读 · 0 评论 -
剑指offer面试题25. 合并两个排序的链表
题目https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof/思路方法1、先把俩个链表都放到数组中,排序后再输出成新的链表 时间复杂度和空间复杂度都是o(n)方法2、构造dummyhead 同时遍历俩个链表,时间复杂度是o(n) 空间复杂度是o(1)import java.util.ArrayL...原创 2020-04-26 22:17:08 · 162 阅读 · 0 评论 -
剑指offer面试题24. 反转链表
题目https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/submissions/思路方法1、开辟一个o(n)数组,把链表的节点都放进去,然后逆序输出新的链表方法2、使用中间变量 就像交换俩个数一样方法3、使用递归实现。(难懂哦) /* 方法一 使用中间变量 类似交换俩个变量的值一样 时间复杂度是...原创 2020-04-25 22:08:10 · 147 阅读 · 0 评论 -
LeetCode1315. 二叉树祖父节点值为偶数
问题https://leetcode-cn.com/problems/sum-of-nodes-with-even-valued-grandparent/方法法1、bfs搜索 把每一层放到队列中进行搜索 /** bfs搜索 把每一层放到队列中进行搜索 */ private int bfs(TreeNode root){ int ret = 0;...原创 2020-04-24 23:18:45 · 574 阅读 · 0 评论 -
读后感--如何判断一个数是否存在 40 亿个整数中
https://blog.csdn.net/csdnsevenn/article/details/82230049?depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-2&utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-2读后感后...原创 2020-04-23 15:08:29 · 95 阅读 · 0 评论 -
滑动窗口法leetcode 1248. 统计「优美子数组」
题目地址https://leetcode-cn.com/problems/count-number-of-nice-subarrays/后记滑动窗口有哪些具体应用,比如TCP中的?原创 2020-04-22 12:43:23 · 140 阅读 · 0 评论 -
剑指offer面试题22. 链表中倒数第k个节点
题目https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/思路考点:1、链表的遍历易错点:1、dummyHead的设置2、第二个循环是否判断数字的大小class Solution { public ListNode getKthFromEnd(ListNode head, ...原创 2020-04-21 19:17:08 · 351 阅读 · 1 评论 -
剑指offer面试题20. 表示数值的字符串
题目https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/思路1、分成三类:整数 小数,指数2、找到公用的判断逻辑比如空判断,去空格判断等等放在抽象类中3、给三类定义成三个判断类,4、主方法在调用的时候,依次去使用三个判断类去执行即可此外还有状态机的判断方法,但是我的状态图不知道怎么下手≥。<...原创 2020-04-18 21:20:26 · 127 阅读 · 0 评论 -
剑指offer面试题21. 调整数组顺序使奇数位于偶数前面
题目https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/分析方法一:使用直接方法 ,开辟俩个数组,一个存储奇数,一个存储偶数,时间和空间复杂度都是o(n)方法二:使用快慢指针 ,时间复杂度为o(n) 因为原地计算,空间复杂度为o(1)代码...原创 2020-04-18 17:20:55 · 149 阅读 · 0 评论 -
剑指offer面试题17. 打印从1到最大的n位数
题目:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/思路计算出上限来算就好了这个问题会遇到的瓶颈就是大数问题 指数太大怎么办?class Solution { public int[] printNumbers(int n) { int i = 1; ...原创 2020-04-13 00:09:50 · 155 阅读 · 0 评论 -
剑指offer面试题18. 删除链表的节点
题目地址:https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/思路:如果相等指向下一个节点傀儡节点这个思想很好啊public class deleteNode { /** * @date: 2020-04-12 22:00 * @param: * @param head: ...原创 2020-04-13 00:07:13 · 140 阅读 · 0 评论 -
剑指offer16. 数值的整数次方
题目地址:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/思路方法一:暴力法方法二:利用指数法则递归计算(分奇数和偶数)还没搞懂方法三: 将n表示为二进制来做package jzoffer;/** * @Auther: wwh * @Date: 2020-04-12 15:48 * @De...原创 2020-04-13 00:03:53 · 85 阅读 · 0 评论 -
剑指offer14- II. 剪绳子 II
题目https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/思路1.数学方法(未做)2.把之前的动态规划 用BigInteger来替换代码import java.math.BigInteger;class Solution { public int cuttingRope(int length) { ...原创 2020-04-05 16:02:42 · 238 阅读 · 0 评论 -
剑指offer14- I. 剪绳子
题目https://leetcode-cn.com/problems/jian-sheng-zi-lcof/思路f(n)=f(n-i)*f(i)…长度为1 2 3 的时候不必参与计算从上到下计算出每个分段的最大值即可class Solution { public int cuttingRope(int length) { if(length<2...原创 2020-04-05 15:59:34 · 117 阅读 · 0 评论 -
剑指offer15. 二进制中1的个数
题目https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/思路方法一:使用Java转换成2进制方法二:每次和1做与运算,然后右移一位 public int hammingWeight(int n) { String string = Integer.toBinaryString( n); ...原创 2020-04-05 15:53:59 · 86 阅读 · 0 评论 -
剑指offer 13机器人可达的范围
题目https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/submissions/思路1.定义一个标识数组 标记哪些是已经走过的2.从左边和右边进行递归遍历 public int m, n; public int[][] visited; public int movingCount(i...原创 2020-03-29 11:21:40 · 115 阅读 · 0 评论 -
剑指offer12矩阵中的路径
题目地址https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/思路一个完整的字符串,可能从矩阵中任何一个字符开始 所以深度遍历每个元素关键点:1、dfs2、存储遍历过的矩阵3、方向偏移量矩阵代码/** * @Auther: wwh * @Date: 2020-03-24 22:12 * @Des...原创 2020-03-24 23:32:44 · 116 阅读 · 0 评论 -
剑指offer11 求旋转数组最小的数字
题目https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/思路思路 因为数组递增的一个旋转 ,所以遍历 当前小于前一个 说明当前是最小代码public class MinArray { public static int minArray(int[] numbers) { ...原创 2020-03-24 01:03:44 · 71 阅读 · 0 评论 -
剑指offer爬楼梯
题目https://leetcode-cn.com/problems/climbing-stairs/submissions/思路斐波那契算法代码class Solution { public int climbStairs(int n) { //2020年03月17日23:38:35 if(n==1||n==2){ ret...原创 2020-03-17 23:59:46 · 225 阅读 · 0 评论 -
剑指offer面试题05. 替换空格
题目https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/思路遍历字符串 每个字母放到数组中 然后把数组再合并为String代码 public String replaceSpace2(String s) { if(s==null){ return s; } ...原创 2020-03-15 16:51:11 · 74 阅读 · 0 评论 -
剑指offer面试题06. 从尾到头打印链表
题目https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/思路遍历链表到数组 然后反转后返回即可代码 /** * * @date: 2020-03-10 22:00 * @param: * @param head: * @return: * @retu...原创 2020-03-15 16:48:50 · 164 阅读 · 0 评论 -
剑指offerN04 二维数组判断数字是否包含
题目https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/思路循环, 好像有更好的方法,,代码/** * @Auther: wwh * @Date: 2020-03-08 23:05 * @Description: 2020年03月08日23:03:27 -- 2020年03月08日23:09...原创 2020-03-15 16:43:09 · 84 阅读 · 0 评论 -
剑指offerN03寻找重复数字
题目 https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/思路1.利用set的不可重复来做2、使用map来做public class N02FindRepeatNumber { /** * * @date: 2020-03-08 22:54 * @param: *...原创 2020-03-15 16:40:28 · 73 阅读 · 0 评论 -
剑指offer第10 计算斐波那契
题目https://leetcode-cn.com/problems/fibonacci-number/solution/fei-bo-na-qi-shu-by-leetcode/思路第一种方法使用递归,但是耗时间太长,因为有很多是重复计算,所以使用map保存中间变量,因为求f(n)只需要f(n-1)和f(n-2)即可 所以只需要保存前俩个计算结果即可代码public class N10...原创 2020-03-14 22:14:56 · 73 阅读 · 0 评论