
每日算法
PAT,LeetCode
悠闲是蓝蓝
这个作者很懒,什么都没留下…
展开
-
每日算法:数组中最长的山脉
原题//先找到比左右两侧大的数 然后以这个数为中心 依次找到左右的长度class Solution { public int longestMountain(int[] A) { if (A == null || A.length <= 2) { return 0; } int res = 0; for (int i = 1; i < A.length - 1; i++) {翻译 2020-10-25 12:07:48 · 284 阅读 · 0 评论 -
每日算法:贪心
题目输入:clips = [[0,4],[2,8]], T = 5输出:2解释:注意,你可能录制超过比赛结束时间的视频。class Solution { public int videoStitching(int[][] clips, int T) { int point = 0; int sum = 0; int cnt = 0; //剪辑次数不能超过T次; while (point < T &am原创 2020-10-24 18:04:27 · 85 阅读 · 0 评论 -
每日算法:链表,快慢指针,反转链表
判断一个链表是否为回文链表。class Solution { public boolean isPalindrome(ListNode head) { if (head == null || head.next == null) { return true; } ListNode fast = head; ListNode slow = head; // 快慢指针 while(f原创 2020-10-23 08:19:53 · 105 阅读 · 0 评论 -
每日算法:二叉树
二叉树的最小绝对值class Solution { private int res = Integer.MAX_VALUE; TreeNode pre = null; public int getMinimumDifference(TreeNode root) { //二叉查找树中,中间节点的值一定是其左右节点值的中间数,因此最小差别一定是在中间节点与左右节点之间 getMin(root); return res; }原创 2020-10-12 07:47:05 · 77 阅读 · 0 评论 -
每日算法:环形链表的判断
快慢指针public class Solution { public boolean hasCycle(ListNode head) { //快慢指针 ListNode fast=head; ListNode slow=head; while(fast!=null&&fast.next!=null){ fast=fast.next.next; slow=slow.next原创 2020-10-09 07:27:20 · 156 阅读 · 0 评论 -
每日算法:弗洛伊德算法
原题class Solution { public int[] sumOfDistancesInTree(int N, int[][] edges) { final int INF = 0x3f3f3f3f; int [][]graph=new int[N][N]; for(int i=0;i<N;i++){ Arrays.fill(graph[i],INF);// } for(int [原创 2020-10-06 10:02:39 · 119 阅读 · 0 评论 -
每日算法:中序后序创建树
算法地址其实思路比较好想到,就是如何划分子问题,然后递归的构建左子树和右子树。 inorder = [9,3,15,20,7] postorder = [9,15,7,20,3]因为后序后遍历根节点,后续最后一个节点为整棵树的根节点,可以确定根节点为3;再根据中序得到: leftInOrder = [9]RightInOrder = [15, 20 ,7] 又由于中序和先序的数组大小应该相同的, 所以, LeftPostOrder = [9] RightPostOrder = [15, 7, 20]翻译 2020-09-25 06:38:56 · 153 阅读 · 0 评论 -
每日算法:优先队列
链接前 K 个高频元素给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]class Solution { public int[] topKFrequent(int[] nums, int k) { Map<Integer, Integer> occurrences = new HashM翻译 2020-09-07 08:01:40 · 142 阅读 · 0 评论 -
每日算法:贪心
题目1353. 最多可以参加的会议数目给你一个数组 events,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 startDayi ,结束于 endDayi 。你可以在满足 startDayi <= d <= endDayi 中的任意一天 d 参加会议 i 。注意,一天只能参加一个会议。请你返回你可以参加的 最大 会议数目。class Solution { public int maxEvents(int[][] events)翻译 2020-09-04 08:21:46 · 160 阅读 · 0 评论 -
每日算法:n皇后,dfs,回溯
题目class Solution { List<List<String>>res; int n; boolean []col;//记录某列是否放置皇后 boolean []main1;//对角线 boolean []sub;//副对角线 public List<List<String>> solveNQueens(int n) { res=new ArrayList<>();翻译 2020-09-03 08:06:46 · 140 阅读 · 0 评论 -
每日一题:动态规划
题目486. 预测赢家给定一个表示分数的非负整数数组。 玩家 1 从数组任意一端拿取一个分数,随后玩家 2 继续从剩余数组任意一端拿取分数,然后玩家 1 拿,…… 。每次一个玩家只能拿取一个分数,分数被拿取之后不再可取。直到没有剩余分数可取时游戏结束。最终获得分数总和最多的玩家获胜。给定一个表示分数的数组,预测玩家1是否会成为赢家。你可以假设每个玩家的玩法都会使他的分数最大化。示例 1:输入:[1, 5, 2]输出:False解释:一开始,玩家1可以从1和2中进行选择。如果他选择 2(或者原创 2020-09-02 08:07:49 · 159 阅读 · 0 评论 -
每日算法:优先队列+递归
题目332. 重新安排行程给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。说明:如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比就更小,排序更靠前所有的机场都用三个大写字母表示(机场代码)。假定所有机票至少存在一种合理的行程。原创 2020-08-27 08:01:23 · 186 阅读 · 0 评论 -
每日算法:回溯
原题17. 电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。class Solution { public List<String> letterCombinations(String digits) { List<String> list = new ArrayList<>(); if (digits == null || digits.length() == 0) {翻译 2020-08-26 07:48:54 · 115 阅读 · 0 评论 -
每日算法:回溯
原题491. 递增子序列给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]class Solution { public List<List<Integer>> findSubsequences(int[] nums) {翻译 2020-08-25 07:37:55 · 108 阅读 · 0 评论 -
每日算法:满二叉树
原题求出所有有N个节点的满二叉树class Solution { public List<TreeNode> allPossibleFBT(int N) { List<TreeNode> res=new ArrayList<>(); if (N%2==0) { return res; } if(N==1){ TreeNode root=new Tre翻译 2020-08-25 07:35:41 · 239 阅读 · 0 评论 -
每日算法:dfs,二叉树
题目971. 翻转二叉树以匹配先序遍历class Solution { int i=0; boolean flag; List<Integer>res=new ArrayList<>(); public List<Integer> flipMatchVoyage(TreeNode root, int[] voyage) { dfs(root,voyage); if(flag){ L翻译 2020-08-24 07:22:13 · 155 阅读 · 0 评论 -
每日算法:动态规划
题目413. 等差数列划分如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。A = [1, 2, 3, 4]返回: 3, A 中有三个子等差数组: [1, 2, 3], [2, 3, 4] 以及自身 [1, 2, 3, 4]。class Solution { public int numberOfArithmeticSlices(int[] A) { int res=0; if(A==null||A.length<2)re翻译 2020-08-23 07:39:39 · 107 阅读 · 0 评论 -
每日算法:m和n之间按位与运算
题目201. 数字范围按位与给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例 1:输入: [5,7]输出: 4示例 2:输入: [0,1]输出: 0class Solution { public int rangeBitwiseAnd(int m, int n) { int offset=0; while(m!=n){翻译 2020-08-23 07:02:15 · 389 阅读 · 0 评论 -
每日算法:dfs和bfs
题目扫雷游戏class Solution { int[] dirX = {0, 1, 0, -1, 1, 1, -1, -1}; int[] dirY = {1, 0, -1, 0, 1, -1, 1, -1}; public char[][] updateBoard(char[][] board, int[] click) { int m=board.length; int n=board[0].length; int x=cl原创 2020-08-22 06:12:32 · 107 阅读 · 0 评论 -
每日算法:反转链表
反转链表1反转链表2206. 反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULLclass Solution { public ListNode reverseList(ListNode head) { ListNode pre=null; ListNode cur=head; while(cur!=null原创 2020-08-21 08:11:07 · 117 阅读 · 0 评论 -
算法练习:hash表
题目128. 最长连续序列给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。class Solution { public int longestConsecutive(int[] nums) { Set<Integer>set=new HashSet<>();翻译 2020-08-19 06:12:13 · 144 阅读 · 0 评论 -
每日算法:链表和二叉树
题目109. 有序链表转换二叉搜索树给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5class Solution {原创 2020-08-18 05:52:15 · 156 阅读 · 0 评论 -
每日算法:树
原题110. 平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]3/ 9 20/ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2/ \3 3/ 4 4返回 false 。class Solutio翻译 2020-08-17 07:30:32 · 109 阅读 · 0 评论 -
每日算法:动态规划
鸽了好久,因为动归对于我来说,比较难。原题5. 最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”class Solution { public String longestPalindrome(String s) { if(s==null||s.length()<2)ret翻译 2020-08-16 06:45:21 · 179 阅读 · 0 评论 -
每日算法:二分,中位数
题目4. 寻找两个正序数组的中位数给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5class Solution { p原创 2020-08-07 08:08:31 · 568 阅读 · 0 评论 -
每日算法:最长子串
题目无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序原创 2020-08-06 09:34:41 · 975 阅读 · 0 评论 -
每日算法:链表,LeetCode两数相加
题目2. 两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807/** * Definition for si原创 2020-08-06 07:36:52 · 109 阅读 · 0 评论 -
每日算法:两数之和
https://leetcode-cn.com/problems/two-sum/两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]class Solution {原创 2020-08-05 08:40:35 · 119 阅读 · 0 评论 -
1048 数字加密 (20分)java实现(统一格式处理)
当数据格式一致时,处理会更加方便。刚开始的十分,想分别处理长串和短串,不仅容易乱,而且还容易忽略细节。import java.util.Scanner;/** * 首先固定一个加密用正整数 A,对任一正整数 B,将其每 1位数字与 A 的对应位置上的数字进行以下运算: * 对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12; * 对...原创 2020-02-24 11:42:53 · 723 阅读 · 0 评论 -
1041 考试座位号 (15分)java实现(散列思想)
题目要求:根据学生测试座位号,输出学生编号以及实际座位示例:输入43310120150912233 2 43310120150912119 4 13310120150912126 1 33310120150912002 3 223 4输出:3310120150912002 23310120150912119 1原本的思路是用map,多此一举。Student s=new ...原创 2020-02-23 15:27:42 · 423 阅读 · 0 评论 -
1.1日期差处理
处理日期差有一个很直接的思路,那就是令小日期不断+1,直到等于大日期。函数:判断闰年。用二维数组区分闰年月份与平年月份的不同。记着这个思路,自己想的很容易乱package test1;import java.util.Scanner;/** * 计算日期差YYYYMMDD * @author DELL * */public class Test1 { static int...原创 2020-02-28 09:39:36 · 187 阅读 · 0 评论 -
1025 PAT Ranking (25分)java实现,最后一个测试点超时
处理排名(1 1 3 4 4 6)的方式有两种第一种方法:第一个人记为1,遍历剩余个体bl.get(0).rank=1;for(int k=1;k<bl.size();k++) { if(bl.get(k).score==bl.get(k-1).score) { bl.get(k).rank=bl.get(k-1).rank; }else { bl.get(k).rank=...原创 2020-02-28 11:08:38 · 440 阅读 · 0 评论