算法笔记
努力成长的小张
恐惧源于未知
展开
-
算法合集(五)
三角形的最大周长 给定由一些正数(代表长度)组成的数组arr,返回由其中三个长度组成,面积不为0的三角形的最大周长。 如果不能形成任何面积不为0的三角形,则返回0。 实现 首先应该知道组成三角形的边长的条件,即任意两边之和必须大于第三边,任意两边之差必须小于第三边。在这里用到的是最长边一定大于其他两边的和。 思路:首先将数组进行排序,然后从最大的一位开始向前取三个数字来判断是否可以组成三角形,如果可以则直接返回三边之和。 package test; import java.util.Arrays; pu原创 2021-05-31 17:19:38 · 71 阅读 · 0 评论 -
算法合集(四)
今天事情比较多,主要来复习一下树型数据结构及贪心算法。 二叉树最小深度 给定一个二叉树,找出其最小深度。 深度优先 思路 (1)如果是叶子节点的话,我们可以将其深度设置为1; (2)如果不是叶子节点,对比其左右子节点的深度以及之前遍历时保存的最小的深度,选其中最小,最终输出min+1即为本题的解。 package test; public class TreeDeep { static class TreeNode{ int val; TreeNode left; TreeNode原创 2021-05-13 16:45:44 · 68 阅读 · 0 评论 -
算法合集(三)
合并两个有序数组 有序数组nums1和nums2,将nums2合并到nums1中,使得nums1为有序数组。 实现原创 2021-05-12 16:28:41 · 77 阅读 · 0 评论 -
算法合集(二)
斐波那契数列 求取斐波那契数列第N位的值。 实现 下面写出了三种算法实现,并在注释中给出了相应的时间复杂度。 package test; public class Fibonacci { public static void main(String[] args) { System.out.println(FibonacciTest(6)); System.out.println(FibonacciTest1(6)); System.out.println(FibonacciTest2(6)原创 2021-05-11 16:05:58 · 75 阅读 · 0 评论 -
算法合集(一)
题目一 不使用sqrt(x)函数,得到x的平方根的整数部分。 实现 package test; public class SqrtX { public static void main(String[] args) { System.out.println(binarySearch(25)); System.out.println(newton(25)); } //二分查找 public static int binarySearch(int x) { int index = -1,l原创 2021-05-10 15:42:12 · 153 阅读 · 0 评论 -
寻找数组的中心下标
题目要求:给定一个整数数组nums,编写返回数组中心下标的算法。 中心下标其左侧所有元素相加的和等于右侧所有元素相加的和。如果不存在,返回-1,如果存在多个,返回最左边的中心下标。 想法 使用双指针算法。首先计算出整个数组元素的和sum,之后设定i由数组左边开始遍历,每指向一个元素时,i代表的值增加,sum代表的值减少,直到两个的值相同为止。pivotIndexTest()是另一种实现方法,将判断条件改了,总体思路与上述一致。 代码实现 package test; import java.util.Arr原创 2021-05-10 11:43:04 · 297 阅读 · 0 评论 -
删除排序数组中的重复项
题目要求:一个有序数组nums,原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。 不可以使用额外的数组空间,必须在原地删除并且额外空间复杂度为O(1)。 重点是双指针算法。 算法思想 使用双指针i和j,在遍历数组时,i首先指向第一个元素,j指向后一个元素,之后对i和j指向的数值进行对比。 如果nums[i] == nums[j]的话,那么增加j来跳过重复项; 如果nums[i] != nums[j]的话,此时将nums[j]的值赋值给nums[i+1],然后递增i。 接着重复相同的过程原创 2021-05-08 17:02:57 · 132 阅读 · 0 评论 -
素数个数统计算法
题目要求:统计n以内的素数个数 暴力算法 public class Sushu { public static void main(String[] args) { System.out.println(bf(100)); } //暴力算法 public static int bf(int n) { int count = 0; for(int i = 2;i < n;i++) { count += isPrime(i) ? 1:0; } return count;原创 2021-05-07 17:39:33 · 381 阅读 · 0 评论 -
算法笔记(反转链表)
算法笔记(反转链表) 之前在朋友的推荐下自己购买服务器搭建了个博客,但是到期后就不用了。时隔这么久再次开始,希望自己可以坚持下去。 近期的计划主要是:1.完成 迭代方法实现 package test; public class ReverseList { static class ListNode{ int val; ListNode next; public ListNode(int val, ListNode next) { this.val = val; this.原创 2021-04-23 19:49:08 · 229 阅读 · 0 评论