随笔分类 - 算法
记录算法
摘要:写在前面的话:之前没好好学动态规划,现在开始再重新学一遍吧! 1 买卖股票的最佳时机II // 简易的做法 public int maxProfit(int[] prices) { // 这个题目隐含了可以,同一个股票卖了又买,所以 // 1,2,3,4,5。5 - 1 = (2 - 1) + (3
阅读全文
摘要:题目链接 检讨代码TAT,模拟思路 Stack<Integer> s1 = new Stack<>(); Stack<Integer> s2 = new Stack<>(); public CQueue() { s1 = new Stack<>(); s2 = new Stack<>(); } //
阅读全文
摘要:题目链接 代码 第一种写法,多使用了一个辅助指针 public ListNode deleteNode(ListNode head, int val) { if (head == null) return null; // 首先分析在首部的情况 if (head.val == val) { retu
阅读全文
摘要:题目链接 class Solution { // 说一下我自己的理解 // 数组中的数字都是排好序的,如果左指针和右指针相加大于target, // 那么左指针+1,也肯定不满足,这个时候右指针-1,当s比target小的时候, // 左指针+1, public int[] twoSum(int[]
阅读全文
摘要:题目链接 代码 /** * 摩尔投票 * 用投票抵消的思路来解题,如果当前的数字和下一个数字相等,那么可以抵消的票数 * +1,如果不相等,那么-1 * */ public int majorityElement(int[] nums) { int ans = 0, votes = 0; for (
阅读全文
摘要:题目链接 代码 class Solution { public List<Integer> majorityElement(int[] nums) { // 创建返回值 List<Integer> res = new ArrayList<>(); if (nums == null || nums.l
阅读全文
摘要:题目链接 代码 public int[] maxSlidingWindow(int[] nums, int k) { // 考虑数组中只有一个数 if (nums.length == 0 || k == 0) return new int[0]; // 采用双端队列 Deque<Integer> d
阅读全文
摘要:题目链接 代码 class Solution { public List<List<Integer>> threeSum(int[] nums) { int n = nums.length; Arrays.sort(nums); List<List<Integer>> ans = new Array
阅读全文
摘要:题目链接 二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路: 直接暴力,或者在这个基础之上,横向加一个二分,可以加速不少。 publ
阅读全文
摘要:题目链接 **思路:**思路挺简单的,用一个临时节点B记录当前节点,另外一个节点A.next 指向 B,同时更更新节点A,A = A.next。这样就形成了反向? 代码 class Solution { public ListNode reverseList(ListNode head) { if
阅读全文
摘要:题目链接 代码参考自 public static boolean flag = false; // 用来判断当前走过来距离是否有这样一个数 public int judge(int []stones, int value) { int left = 0, right = stones.length
阅读全文
摘要:题目来自 代码及思路 public boolean isSubStructure(TreeNode A, TreeNode B) { if (A == null || B == null) return false; //先从根节点判断B是不是A的子结构,如果不是在分别从左右两个子树判断, //只要
阅读全文
摘要:题目来自 给定三个整数数组 A = [A1, A2, ... AN], B = [B1, B2, ... BN], C = [C1, C2, ... CN], 请你统计有多少个三元组(i, j, k) 满足: 1 <= i, j, k <= N Ai < Bj < Ck 【输入格式】 第一行包含一个
阅读全文
摘要:题目链接 **题目思路:**呃,这是一种数学规律,让数字拆分成尽可能多的3相乘,如果剩下的数字<=4需要另做考虑,这点很容易得出,这样拆分的数字相乘的结果就是最大的。 代码 public int cuttingRope(int n) { int []dp = {0, 1, 1, 2, 4}; if
阅读全文
摘要:题目链接 题解来自 本题主要是找规律。暴力算法会超时。 我们先来看一个简单的规律: 设f(n)是只从0到n位数的最大值一共有多少个1, f(1) = 计算09有多少个1 = 1; f(2) = 计算099有多少个1; 我们先把1开头的十位数单独拿出来考虑且只考虑十位数上1的个数:1019共有10个1
阅读全文
摘要:第一种算法:卡特兰数,C( 2n , n ) / ( n + 1), (2n)!/[n!(n + 1)!] !表示阶乘(注意这里是两种写法) 第二种算法:动态规划 f(n) = f(n-1)f(0) + f(n-2)f(1) + f(n-3)f(2) + ... + f(1)f(n-2) + f(n
阅读全文
摘要:题目链接 **Rabin-Karp算法思路:**推荐Rabin-Karp算法的讲解,通俗版,力扣官方 自己的理解:Rabin-Karp形如下面的例子,这个算法能够快速的比较是否存在某个字符串,并且方便删除头一个元素,然后在尾部加入一个元素。 为什么?看下面的例子。 1123456789 字符集[1,
阅读全文
摘要:题目链接 代码 class LRUCache { // 使用LinkedHashMap HashMap<Integer, Integer> map; // 因为LinkedHashMap是继承自HashMap的,初始化容量使用的是HashMap的,所以 24 = 32(当申请24容量的时候,实际给的
阅读全文
摘要:剑指 Offer 48. 最长不含重复字符的子字符串 题目来自 滑动窗口代码 public int lengthOfLongestSubstring(String s) { if (s == null || s.length() < 1) { return 0; } int maxNumber =
阅读全文
摘要:题目链接 并查集判环 思路: 并查集判环,挺简单的,如果刚开始就指向了一个根,后面又指向了他,说明就成环了(这里不考虑数据重复,比如2->3,2->3)。这个题还有一个点要注意,单次数据可能不止一张图! package 记录.HDU; import java.util.HashSet; import
阅读全文

浙公网安备 33010602011771号