![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java算法题
pdh慎行
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 52. 两个链表的第一个公共节点
剑指 Offer 52. 两个链表的第一个公共节点输入两个链表,找出它们的第一个公共节点。思想:双指针法,浪漫相遇public static ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode pointA = headA; ListNode pointB = headB; while(pointA!=pointB){ pointA =(原创 2021-04-19 16:42:56 · 56 阅读 · 0 评论 -
剑指 Offer 32 . 从上到下打印二叉树
main函数测试代码:按标准输入输出,比如输入:3,9,20,null,null,15,7 public static void main(String[] args) { //输入3,9,20,null,null,15,7 Scanner sc = new Scanner(System.in); String s = sc.nextLine(); String[] split = s.split(","); TreeNo原创 2021-04-15 20:48:19 · 56 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
题目描述:请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的原创 2021-04-12 18:28:28 · 103 阅读 · 0 评论 -
剑指 Offer 24. 反转链表
题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL一:迭代建议看B站课程:https://www.bilibili.com/video/BV1iB4y1P7PU?p=1//方法一:迭代 public static ListNode reverseList1(ListNode head) {原创 2021-04-11 23:00:25 · 74 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1 :输入:head = [1,3,2] 输出:[2,3,1]限制:0 <= 链表长度 <= 10000解法一:递归遍历一次链表,在遍历的过程中将每个节点的 next 指针反向,使得每个节点的next都指向了他的前一个节点pre然后第二次反向遍历,将节点的值存入数组public int[] reversePrint(ListNode head) {原创 2021-04-10 17:11:03 · 70 阅读 · 0 评论 -
LeetCode——1710. 卡车上的最大单元数
力扣上提交的代码class Solution { public int maximumUnits(int[][] boxTypes, int truckSize) { int res = 0;//存储可以装载单元的最大总数 //根据二维数组的第二列数据降序排列 Arrays.sort(boxTypes,(o1, o2) -> o2[1]-o1[1]); for (int i = 0; i<boxTypes.length .原创 2021-03-19 10:37:19 · 136 阅读 · 0 评论 -
LeetCode——LCP 06.拿硬币
这个题简单到我觉得不用写思路,也没有啥坑。class Solution { public int minCount(int[] coins) { int len = coins.length; int count = 0; for(int i=0;i<len;i++){ count+=coins[i]/2; if(coins[i]%2==0){ continue;.原创 2021-03-19 09:37:05 · 62 阅读 · 0 评论 -
LeetCode——面试题 08.01. 三步问题
题目描述:三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。示例1: 输入:n = 3 输出:4 说明: 有四种走法 示例2: 输入:n = 5 输出:13 提示:n范围在[1, 1000000]之间解决思路:动态规划参考文章:动态规划之青蛙跳台阶动态规划基本思想动态规划的实质是分治思想和解决冗余。因此,动态规划是一种将问题实例分解为更小的/相原创 2021-03-16 22:08:55 · 279 阅读 · 0 评论 -
LeetCode——350. 两个数组的交集 II
题目描述:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。这个是我自己一开始写出来的算法,有一点繁琐,但是理解并不困,使用了排序以及链表public int[] intersect原创 2021-03-16 10:23:25 · 101 阅读 · 0 评论 -
LeetCode——866.回文素数
分析,这个题目本身不难,用数学方法很容易解出来,问题是当给的数据过大时,容易超时。数学法:遍历所有数字,检查是不是回文串。如果是,检查是不是素数,如果当前数字长度为 8,可以跳过检查,因为不存在 8 长度的素数。class Solution { public int primePalindrome(int N) { while(true){ if(isPalindrome(N) && isPrime(N)) .原创 2021-03-12 16:40:27 · 122 阅读 · 0 评论 -
LeetCode——1721.交换链表中的节点
方法一:好理解,但是需要遍历三次链表/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this..原创 2021-03-12 15:00:21 · 101 阅读 · 0 评论 -
LeetCode——1405.最长快乐字符串
class Solution { public String longestDiverseString(int a, int b, int c) { StringBuilder sb = new StringBuilder(); ArrayList<RedefineType> list = new ArrayList<>(); list.add(new RedefineType('a',a)); list.ad.原创 2021-03-12 11:26:03 · 126 阅读 · 0 评论 -
leetCode —— 1200.最小绝对差
class Solution { public List<List<Integer>> minimumAbsDifference(int[] arr) { //由小到大排序 Arrays.sort(arr); int min = arr[1]-arr[0];//注意这个最小值的选取 for (int i = 1; i < arr.length; i++) { if (min &g.原创 2021-03-11 17:49:49 · 90 阅读 · 0 评论 -
LeetCode450题—— 删除二叉搜索树中的节点
首先需要认识什么是二叉搜索树,可以进入百度词条https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91/7077855?fr=aladdin一定要注意题目要求算法时间复杂度是O(h)。递归方法:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *.原创 2021-03-10 15:35:50 · 72 阅读 · 0 评论 -
力扣09-回文数
第一种解法,是将整数转换为字符串,排除x<0这种必不为回文数的情况,和x=0这种必为回文数的情况,x>0的情况以字符串中间位置为界,循环判断两侧字符是否相等。import java.util.Scanner;public class Palindrome9 { public static void main(String[] args) { System.out.println("请输入一个整数"); Scanner sc = new Scanne.原创 2021-03-10 13:15:16 · 74 阅读 · 0 评论 -
LeetCode题库整理【Java】—— 3 无重复字符的最长子串
LeetCode题库整理【Java】## 3 无重复字符的最长子串题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “dvdf”输出: 1解释: 因为无重复字符的最长子串是 “vdf”,所以其长度为 3。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案原创 2020-10-25 17:06:58 · 115 阅读 · 0 评论 -
LeetCode题库整理【Java】—— 2 两数相加
LeetCode题库整理【Java】2.两数相加题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例1:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807示例2原创 2020-10-25 13:38:38 · 131 阅读 · 0 评论 -
LeetCode题库整理【Java】—— 7整数反转
LeetCode题库整理【Java】7.整数反转题目:给出一个32位的有符号整数,你需要将这个这个整数中每位上的数字进行反转。 示例1: 输入: 123 输出: 321 示例2: 输入: -123 输出: -321 示例3: 输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, (2^31) −1]。请根据这个假设,如果反转后整数溢出那么就返回原创 2020-10-24 21:54:24 · 153 阅读 · 0 评论 -
LeetCode题库整理【Java】—— 1两数之和
LeetCode题库整理【Java】1.两数之和题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9 返回 [0, 1]方法一:这道题目比较容易想到的是通过暴力搜索求解,但暴力搜索的时间复杂度为 O(n^2)。Java代码如下:public class Sum原创 2020-10-24 20:18:30 · 130 阅读 · 0 评论