Loading

随笔分类 -  数据结构

摘要:剑指 Offer 03. 数组中重复的数字 题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 Input: {2, 3, 1, 0, 2, 5} Output: 阅读全文
posted @ 2020-12-19 21:13 kopoo 阅读(119) 评论(0) 推荐(0)
摘要:https://www.cnblogs.com/findbetterme/p/10787118.html 看这个就完事了 1. 统计两个数的二进制表示有多少位不同 461. Hamming Distance (Easy) Leetcode / 力扣 Input: x = 1, y = 4 Outpu 阅读全文
posted @ 2020-12-09 17:24 kopoo 阅读(57) 评论(0) 推荐(0)
摘要:1. 把数组中的 0 移到末尾 283. Move Zeroes (Easy) Leetcode / 力扣 class Solution { public void moveZeroes(int[] nums) { int id=0; for(int num:nums){ if(num!=0)num 阅读全文
posted @ 2020-12-05 22:13 kopoo 阅读(65) 评论(0) 推荐(0)
摘要:204. 计数质数 难度简单523 统计所有小于非负整数 n 的质数的数量。 class Solution { public int countPrimes(int n) { boolean[] isPrim = new boolean[n]; Arrays.fill(isPrim, true); 阅读全文
posted @ 2020-12-03 11:02 kopoo 阅读(43) 评论(0) 推荐(0)
摘要:4. 两个字符串包含的字符是否完全相同 242. Valid Anagram (Easy) Leetcode / 力扣 可以用 HashMap 来映射字符与出现次数,然后比较两个字符串出现的字符数量是否相同。 由于本题的字符串只包含 26 个小写字符,因此可以使用长度为 26 的整型数组对字符串出现 阅读全文
posted @ 2020-12-03 10:37 kopoo 阅读(63) 评论(0) 推荐(0)
摘要:Java 中的 HashSet 用于存储一个集合,可以查找元素是否在集合中。如果元素有穷,并且范围不大,那么可以用一个布尔数组来存储一个元素是否存在。例如对于只有小写字符的元素,就可以用一个长度为 26 的布尔数组来存储一个字符集合,使得空间复杂度降低为 O(1)。 Java 中的 HashMap  阅读全文
posted @ 2020-12-01 11:30 kopoo 阅读(73) 评论(0) 推荐(0)
摘要:1. 用栈实现队列 232. Implement Queue using Stacks (Easy) Leetcode / 力扣 class MyQueue { Stack<Integer> stack1=new Stack<>(); Stack<Integer> stack2=new Stack< 阅读全文
posted @ 2020-11-30 19:21 kopoo 阅读(52) 评论(0) 推荐(0)
摘要:递归 一棵树要么是空树,要么有两个指针,每个指针指向一棵树。树是一种递归结构,很多树的问题可以使用递归来处理。 1. 树的高度 104. Maximum Depth of Binary Tree (Easy) Leetcode / 力扣 class Solution { public int max 阅读全文
posted @ 2020-11-13 10:57 kopoo 阅读(85) 评论(0) 推荐(0)
摘要:1.发现两个链表的交点 160.两个链表的交集(容易) Leetcode /力扣 public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode curA=h 阅读全文
posted @ 2020-11-11 11:22 kopoo 阅读(51) 评论(0) 推荐(0)
摘要:递归和动态规划都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保存了子问题的解,避免重复计算。 斐波那契数列 1. 爬楼梯 70. Climbing Stairs (Easy) Leetcode / 力扣 题目描述:有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法。 阅读全文
posted @ 2020-10-25 16:47 kopoo 阅读(185) 评论(0) 推荐(0)
摘要:BFS 广度优先搜索一层一层地进行遍历,每层遍历都是以上一层遍历的结果作为起点,遍历一个距离能访问到的所有节点。需要注意的是,遍历过的节点不能再次被遍历。 第一层: 0 -> {6,2,1,5} 第二层: 6 -> {4}2 -> {}1 -> {}5 -> {3} 第三层: 4 -> {}3 -> 阅读全文
posted @ 2020-09-29 10:12 kopoo 阅读(105) 评论(0) 推荐(0)
摘要:归并排序就是一个用分治法的经典例子,这里我用它来举例描述一下上面的步骤: 1、归并排序首先把原问题拆分成2个规模更小的子问题。 2、递归地求解子问题,当子问题规模足够小时,可以一下子解决它。在这个例子中就是,当数组中的元素只有1个时,自然就有序了。 3、最后,把子问题的解(已排好序的子数组)合并成原 阅读全文
posted @ 2020-09-26 16:52 kopoo 阅读(91) 评论(0) 推荐(0)
摘要:二分查找实现 非常详细的解释,简单但是细节很重要 https://www.cnblogs.com/kyoner/p/11080078.html 正常实现 Input : [1,2,3,4,5] key : 3 return the index : 2 public int binarySearch( 阅读全文
posted @ 2020-09-22 22:01 kopoo 阅读(70) 评论(0) 推荐(0)
摘要:排序 快速排序 用于求解 Kth Element 问题,也就是第 K 个元素的问题。 可以使用快速排序的 partition() 进行实现。需要先打乱数组,否则最坏情况下时间复杂度为 O(N2)。 堆排序 用于求解 TopK Elements 问题,也就是 K 个最小元素的问题。可以维护一个大小为 阅读全文
posted @ 2020-09-22 12:43 kopoo 阅读(65) 评论(0) 推荐(0)
摘要:1. 分配饼干 455. 分发饼干 题目描述:每个孩子都有一个满足度 grid,每个饼干都有一个大小 size,只有饼干的大小大于等于一个孩子的满足度,该孩子才会获得满足。求解最多可以获得满足的孩子数量。 class Solution { public int findContentChildren 阅读全文
posted @ 2020-09-10 22:24 kopoo 阅读(139) 评论(0) 推荐(0)
摘要:算法思想 双指针 167. 两数之和 II - 输入有序数组 双指针的典型用法 如果两个指针指向元素的和 sum == target,那么得到要求的结果;如果 sum > target,移动较大的元素,使 sum 变小一些;如果 sum < target,移动较小的元素,使 sum 变大一些。 数组 阅读全文
posted @ 2020-08-19 11:26 kopoo 阅读(65) 评论(0) 推荐(0)
摘要:1、面试题43. 1~n整数中1出现的次数 输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。 例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。 这个题目的核心思想是考虑:每个位是任意数字时,可以包含多少个这个位为1的数字 分了三种情况 cl 阅读全文
posted @ 2020-06-11 16:36 kopoo 阅读(89) 评论(0) 推荐(0)
摘要:一、分别按照二叉树先序,中序和后序打印所有的节点。 这道题就是书上的算法思想的实际使用,唯一需要特别注意到的是用递归的方式建树,还是比较巧妙的,因为一棵树的建立过程字符流是重复使用的,用递归的方式对根进行循环赋值。 import java.io.BufferedReader; import java 阅读全文
posted @ 2020-04-30 15:42 kopoo 阅读(151) 评论(0) 推荐(0)
摘要:一、getMin栈 题目描述 实现一个特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。 输入描述: 第一行输入一个整数N,表示对栈进行的操作总数。 下面N行每行输入一个字符串S,表示操作的种类。 如果S为"push",则后面还有一个整数X表示向栈里压入整数X。 如果S为"po 阅读全文
posted @ 2020-03-07 15:41 kopoo 阅读(120) 评论(0) 推荐(0)