力扣每日两题
文章平均质量分 54
一只呆桃酱
就算是因着惯性向前,也要一直向前走,走着走着或许就有了方向,以后还有那么那么那么久呢,都会好的,加油。
展开
-
复旦大学机考题
1.斗牛原题: 给定五个 0~9 范围内的整数 a1, a2, a3, a4, a5。如果能从五个整数中选出三个并且这三个整数的和为10 的倍数(包括 0),那么这五个整数的权值即为剩下两个没被选出来的整数的和对 10 取余的结果,显然如果有多个三元组满⾜和是 10 的倍数,剩下两个数之和对 10 取余的结果都是相同的;如果选不出这样三个整数,则这五个整数的权值为 -1。现在给定 T 组数据,每组数据包含五个 0~9 范围内的整数,分别求这 T 组数据中五个整数的权值【输⼊格式】 第⼀⾏⼀个整数 T原创 2021-06-06 18:13:54 · 192 阅读 · 0 评论 -
南大软院2018年夏令营机试题目
1. 字符串的修改1)题目题目描述依旧是字符串处理,设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:1.删除一个字符;2.插入一个字符;3.将一个字符改为另一个字符。 对任给的两个字符串A和B,计算出将字符串A变换为字符串B所用的最少字符操作次数。输入描述第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于200。输出描述只有一个正整数,为最少字符操作次数。测试样例输入sfdxbqwgfdgw输出4原创 2021-05-23 19:08:51 · 1269 阅读 · 0 评论 -
西北工业大学2018年计算机保研机试题目
1.Problem1:输入三角形的三边长,判断是否能组成三角形////输入三角形的三边长,判断是否能组成三角形 public static void JudgeTriangle(int n){ Scanner in=new Scanner(System.in); double a,b,c; for(int i=0;i<n;i++){ a=in.nextInt(); b=in.nextInt();原创 2021-05-09 21:38:05 · 426 阅读 · 0 评论 -
证明回文链----要求时间O(n)、空间O(1)
1. 回文链表请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true(1)解法一:将链表存储成数组进行判断回文/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListN原创 2021-05-22 13:51:25 · 130 阅读 · 0 评论 -
动态规划(九章算法)详细学习
1.什么是动态规划存在最优子程序,跟分治最大区别就是存在很多相同的子问题,如果用递归就会存在相同的值算了很多次。所以可以用数组的形式将已经计算出来并且后面又需要用得到的保存在数组中。一般求最值(最大/最小)、求总值、存在性问题2.基本步骤以最少零钱兑换题目为例:注意,存在无法找零钱(2、5、7)的情况,此时返回-1即可。但是在写程序的时候就要注意了,可将无法找够零钱的值设置为无穷大。(1)确定状态,一维还是二维,首先由最后一步分析状态:最后一枚硬币可以是2、5、7,所以最少硬币会在这三种情况里面出原创 2021-05-24 22:13:53 · 2110 阅读 · 0 评论 -
数据结构---二叉树的各种经典算法
1:统计二义树中度为1的结点个数、统计二叉树中度为2的结点个数、统计二叉树中度为0的结点个数。package com.company;public class Tree { int val; Tree lChild; Tree rChild; public Tree(){ val=0; rChild=null; lChild=null; } public Tree(int value){原创 2021-04-20 20:45:51 · 1378 阅读 · 1 评论 -
算法合集之分治算法及其应用算法
分治思想自我理解:就是将一个大问题分成小问题,思想与递归很像,分而治之,也就是把一个问题,拆分成几个小问题,最后再汇总解决的方法,而且很多问题就是用递归解决,例如二分搜索(折半查找)经典问题:(1)二分搜索(2)回文算法(2)大整数乘法(3)Strassen矩阵乘法(4)棋盘覆盖(5)合并排序(6)快速排序(7)线性时间选择(8)最接近点对问题(9)循环赛日程表(10)汉诺塔(1)二分搜索切记注意递归的结束点以及切记条件是low<=high,如果没有带=号就会遗漏一个值!原创 2021-03-21 17:06:50 · 103 阅读 · 0 评论 -
贪心算法--及其典型算法
贪心算法思想局部最优,只图眼前利益,但是局部最优之和一般不会是全局最优,但也不一定,比如最小生成树:prim和Kruscal算法还有最短路径迪杰斯特拉,都是超级优秀的贪心算法的应用。还有分饼干问题以及0-1背包问题,都是想着局部最优,在0-1背包问题中,想着重量最优先活着价值最优先往往都得不到全局最优解,但是价值率最优的话可以达到,通常情况下。(1)Prim算法:注意,这里与图不一样的地方就是增加了一个结构closedge,去保存V中每个点与与已经选择的U中点之间的最小距离以及与U中那个点相连。但是原创 2021-03-21 21:15:22 · 3302 阅读 · 0 评论 -
分治法、回溯法、贪心法等等算法
1.分治法:最大子段和的问题分治法:就是将一个大问题,划分为很多小问题,再逐个解决小问题,最后合并结果。并且子问题间互相独立。(跟递归是亲兄弟,实现方法就是递归法。)package test;public class Main { //最大子段和的问题。 public static void main(String[] args) { int []input=new int[]{1,-1,3,5,9,-10,5,10,-10}; int low=0;原创 2021-04-02 21:25:50 · 180 阅读 · 0 评论 -
二叉树的遍历--递归法+非递归法+层次遍历
1.递归法很简单,就是输出结点值得语句所在的位置不同而已(1)先序遍历:public static void PTR(Node p){ if(p!=null){ System.out.print(p.val+" "); PTR(p.lchild); PTR(p.rchild); } }(2)中序遍历:public static void PTR(Node p){ if(原创 2021-04-19 15:52:31 · 109 阅读 · 0 评论 -
算法-----字典树
1.字典树简介用空间换时间的一种典型,如其名,字典,并暴力搜索查找,而是利用前缀去查找,这里的树是一颗拥有最大孩子数目的树。class Trie{ String word; //可用来记录某个结点end值为true的时候他表示的字符串。 boolean end=false; //记录该节点是否为一个字符串的末尾。 int val; //与end连用可以表示有多少个字符串重复 Trie[] children=new Trie[Max]; //这里Max一般有具体原创 2021-05-16 23:29:54 · 179 阅读 · 1 评论 -
背包问题总结
例题:474. 一和零给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。示例 1:输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3输出:4解释:最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是原创 2021-06-06 18:37:43 · 73 阅读 · 0 评论 -
线性表刷题
1.第一题:剑指 Offer 24. 反转链表定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路:利用前插法进行翻转链表,但是要先设置一个头结点,最后返回头结点的next即可,注意注意,边界值问题。/** * Definition for singly-linked list. * public class L原创 2021-04-13 20:05:40 · 146 阅读 · 0 评论 -
模式匹配算法KMP
这里直接给出的是优化后的NextVal的数组(1)改进后的NextVal数组和改进前的Next数组的区别:当计算得出的Next[j]=k时,说明若pattern串中第j位与当前主串中的第i位不匹配时,模式串需要回到第k位继续跟主串中第i位继续比较,但是如果我们计算出的pattern[j]==pattern[k],那么再让pattern[k]与main[i]比较就没有意义,肯定不匹配,所以可在构造next数组时就进行判定,如果相等就直接赋值next[j]=next[k](2)KMP模式匹配充分利用了模式串原创 2021-04-16 11:47:20 · 72 阅读 · 0 评论 -
数据结构---二叉树
1.计算叶子结点带权路径之和:package com.company;import java.util.ArrayDeque;import java.util.Queue;import java.util.Stack;public class Main { static int sumWeight=0; public static void main(String[] args) { //叶子结点的带权路径长度。 Node head=new No原创 2021-04-19 21:53:40 · 69 阅读 · 0 评论 -
动态规划问题dp问题以及经典问题
动态规划其实他的思想跟分治还是很像的,都是分成子问题求最优解最后合并推出总体的最优解。动态规划和分治都是将大问题划分为小问题,小问题间独立是分治,小问题间有状态关系,并且需要用到之前状态是动态规划,不需要的是贪心法。经典问题有找硬币,爬楼梯(1)硬币找零:给予不同面值的硬币若干种种(每种硬币个数无限多),如何用若干种硬币组合为某种面额的钱,使硬币的的个数最少?在现实生活中,我们往往使用的是贪心算法,比如找零时需要13元,我们先找10元,再找2元,再找1元。如果我们的零钱可用的有1、2、5、9、1原创 2021-03-23 20:38:04 · 160 阅读 · 0 评论 -
算法设计可练习题One
算法题目原创 2022-09-27 15:03:43 · 302 阅读 · 0 评论 -
二叉树路径之和问题----力扣路径总和
1. 路径总和给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true示例 2:输入:root = [1,2,3], targetSum = 5输出:false示例 3:输原创 2021-06-21 22:21:33 · 747 阅读 · 0 评论 -
2021-6-13-----树类型------LeetCode刷题
1. 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。class Solution { public int maxDepth(TreeNode root) { if(root==null){ re原创 2021-06-13 22:16:13 · 81 阅读 · 0 评论 -
2021-06-05
1. 203. 移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[](1)解法一:class Solution { publi原创 2021-06-05 20:02:07 · 62 阅读 · 0 评论 -
2021-06-02动态规划力扣刷题
1. 523. 连续的子数组和给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:子数组大小 至少为 2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。示例 1:输入:nums = [23,2,4,6,7], k = 6输出:true解释:[2,4] 是一个大小为 2 的子数组,并且和为 6 。原创 2021-06-02 18:41:09 · 441 阅读 · 0 评论 -
2021-05-03
1. 整数反转给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321class Solution { public int reverse(int x) { long result; boole原创 2021-05-23 19:08:15 · 38 阅读 · 0 评论 -
力扣刷题
1. 剑指 Offer 56 - I. 数组中数字出现的次数一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2] 限制:2 <= nums.length <= 10000 (1)正常思路,用S原创 2021-05-23 19:04:21 · 299 阅读 · 0 评论 -
力扣每日一题2021-05-17
1.993. 二叉树的堂兄弟节点在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。实例一:输入:root = [1,2,3,4], x = 4, y = 3输出:false/** * Defin原创 2021-05-17 21:38:22 · 60 阅读 · 0 评论 -
力扣刷题
1.叶子相似的树请考虑一棵二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;否则返回 false 。输入:root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,原创 2021-05-11 23:23:13 · 103 阅读 · 0 评论 -
动态规划初级篇
1.什么是动态规划:大问题可分解成子问题,问题之间不独立,一般用数组保存记录值,不用递归是因为递归会使得重复计算,而动态递归不同于分治法的一点就是可以利用之前求出的解,不需要从头来。(1)解法:1.找出最优子结构2.找出状态转换方程3.给边界赋值2.题目(力扣)(1).121. 买卖股票的最佳时机最优子结构:状态转换方程:class Solution { public int maxProfit(int[] prices) { //思路:前i天的最大盈利=MAX原创 2021-04-28 18:39:40 · 147 阅读 · 0 评论 -
2021-04-26
1.1011. 在 D 天内送达包裹的能力传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。示例 1:输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5输出:15解释:船舶最低载重 15 就能够在 5 天内送达所有包裹,如下所示:第 1 天:原创 2021-04-26 21:20:01 · 68 阅读 · 0 评论 -
2021-04-24
1.给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。示例 1:输入:nums = [1,2,3], target = 4输出:7解释:所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。class Solution {原创 2021-04-24 20:02:00 · 54 阅读 · 0 评论 -
数据结构--树
第一题:剑指 Offer 55 - I. 二叉树的深度输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。用递归,但是存储空间大。/** * Definition for a binary tree node. * public class TreeNode { * int原创 2021-04-17 23:15:04 · 46 阅读 · 0 评论 -
2021-04-16
第1题.1773. 统计匹配检索规则的物品数量被题出错点:(1)字符串判断值相同一定要用equals,千万不可以用恒等符号。=(2)一开始我的for each用法:List<String> item;for(item:items){...}但是提示不行,这并不符合java中foreach的定义方式:foreach的语句格式:for(元素类型t 元素变量x : 遍历对象obj){ 引用了x的java语句;}最终代码:class Solution {原创 2021-04-16 17:55:17 · 55 阅读 · 0 评论 -
单调队列模板题(一直动态变化的队列中求当前队列的最大/最小)
也称为滑动窗口题:给定一行数,共N个。有一个长度为K的窗口从左向右滑动,窗口中始终有K个数字,窗口每次滑动一个数字。求各个时刻窗口中的最大值和最小值。1、 双端队列双端队列是一种线性表,是一种特殊的队列,遵守先进先出的原则。双端队列支持以下4种操作:(1) 从队首删除(2) 从队尾删除(3) 从队尾插入(4) 查询线性表中任意一元素的值2、 单调队列单调队列是一种特殊的双端队列,其内部元素具有单调性。最大队列与最小队列是两种比较常用的单调队列,其内部元素分别是严格单调递减(不原创 2021-04-14 20:32:39 · 189 阅读 · 0 评论 -
2021-04-06力扣刷题
1.面试题 17.10. 主要元素数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。(1)法一:不需要额外存储空间,但需要先排序。class Solution { public int majorityElement(int[] nums) { int mainNum=-1; if(nums.length==1){ return nums[0]; } int n原创 2021-04-06 19:54:34 · 91 阅读 · 0 评论 -
力扣—数组
1.子矩形查询class SubrectangleQueries { int [][]myRectangle; public SubrectangleQueries(int[][] rectangle) { int row=rectangle.length; //行数 myRectangle=new int[row][]; for(int i=0;i<rectangle.length;i++){ myRec原创 2021-04-05 15:49:51 · 119 阅读 · 0 评论 -
力扣算法题
1.合并两个有序数组(简单)给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。(1)解法一,挺快的但是需要用到辅助空间class Solution { public void merge(int[] nums1, int m, int[] num原创 2021-04-05 11:16:24 · 616 阅读 · 0 评论 -
力扣刷题
1.森林中的兔子题目描述:森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。返回森林中兔子的最少数量。思路:用hash来统计answers中每个数字出现的次数; 然后就是开始处理哈希表里面的统计结果了; 例如, 5出现了8次, 那么至少得2*(5+1)只兔子; 如果5出现了6次呢? 至少需要6只兔子; 如果5出现了3次呢? 还是6只兔子; 当val出现了t次, 如果t%(val+1) == 0, 需要(t/原创 2021-04-04 14:54:13 · 77 阅读 · 0 评论 -
力扣刷算法题
1. 盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。(1)解法一:本人代码,效果很一般,但是已经尽力剪枝了。。。class Solution { public int maxArea(int[] height) { //从下标为0开始存储。原创 2021-04-03 20:03:52 · 259 阅读 · 0 评论 -
牛客网算法题 --链表
1.第一题:链表中环的入口(1)解法一:暴力解体链表法。题目描述对于一个给定的链表,返回环的入口节点,如果没有环,返回null拓展:你能给出不利用额外空间的解法么?本道题第一想法就是暴力破解链表法,因为不需要额外内存,但是注意看本题是求有环时的入口结点,注意注意,不是论证有环,在这里如果使用暴力破解使每个结点都指向head结点,那么会有个漏点,就是如果环的入口真的是head结点的话,那你输出的环的入口就是head结点的前一个结点!!!,所以本题使用的暴力破解是将每个结点的next都指向自己。p原创 2021-04-03 15:14:37 · 174 阅读 · 0 评论 -
CSP 火车购票--java100分 数字排序--java100分
问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。 假设一节车厢有20排、每一排5个座位。为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10号,依次类推,第20排是96到100号。 购票时,一个人可能购一张或多张票,最多不超过5张。如果这几张票可以安排在同一排编号相邻的座位,则应该安排在编号最小的相邻座位。否则应该安排在编号最小的几个空座位中(不考虑是否相邻)。 假设初始时车票全部未被购买,现在给了一些购票指令,请你处理这些指令。原创 2021-04-02 15:23:34 · 281 阅读 · 0 评论 -
CSP 小中大问题
题目很唬人,说什么有小数仅保留一位小数,其实如果有小数最多也就只有一位。。。但是注意,如果运算结果没有小数必须以整数的形式输出,这时候可以利用flag判断一下是否是整数。PS:CSP java等级真的低。。。package test;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in);原创 2021-04-02 00:02:52 · 323 阅读 · 0 评论 -
2021-3-30算法刷题--java
1.第一题:编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。思路,二分查找(递归版)class Solution { public boolean binarySearch(int[][] matrix,int low,int high,int n,int target){ if(low<=high) { int mi原创 2021-03-30 16:34:06 · 355 阅读 · 0 评论