算法
鹏之翼
Hello world.
展开
-
16.二叉树各种遍历之递归&&迭代
static class TreeNode{ int val; TreeNode left; TreeNode right; public TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; }..原创 2022-04-09 11:45:26 · 520 阅读 · 0 评论 -
15.三角形的最大周长
给定由一些正数(代表长度)组成的数组 A ,返回由其中三个长度组成的、面积不为零的三角形的最大周长。 如果不能形成任何面积不为零的三角形,返回 0 。 public static void main(String[] args) { int[]arr=new int[]{9,7,5,2,4,3,8,1}; System.out.println(triangleLength(arr)); } private static int triangleLen原创 2022-04-09 11:01:48 · 144 阅读 · 0 评论 -
14.求最大连续递增序列
给定一个未经排序的整数数组,找到最长且连续递增的子序列,并返回该序列的长度。 public static void main(String[] args) { int[]arr=new int[]{9,4,5,6,1,7,2,3,4,5}; System.out.println(findLength(arr)); } private static int findLength(int[] arr) { int sta...原创 2022-04-09 10:48:56 · 286 阅读 · 0 评论 -
13.求二叉树最大最小深度
TreeNode node8=new TreeNode(8,null,null); TreeNode node7=new TreeNode(7,null,null); TreeNode node6=new TreeNode(6,node7,null); TreeNode node5=new TreeNode(5,null,null); TreeNode node4=new TreeNode(4,null,node8); Tr..原创 2022-04-09 10:47:52 · 465 阅读 · 0 评论 -
11.合并两个有序数组
两个有序整数数组 num1 和 num2,将 num2 合并到 num1 中,使 num1 成为一个有序数组。 public static void main(String[] args) { int []num1=new int[]{1,3,5,7,9,0,0,0,0}; int []num2=new int[]{2,4,6,8}; mergeArr(num1,5,num2,4); System.out.println(Arrays.t原创 2022-04-09 09:55:44 · 561 阅读 · 0 评论 -
10.排列硬币
总共有 n 枚硬币,将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币。给定一个数字 n,找出可形成完整阶梯行的总行数。 public static void main(String[] args) {// System.out.println(arrangeCoins(15)); System.out.println(arrangeCoins(21)); } //迭代 private static int arran...原创 2022-04-09 08:54:52 · 82 阅读 · 0 评论 -
9.环形链表
package com.spj.algorithm;/* *@program:架构师 *@Author:peng *@Time:2022/4/9 8:36 * */public class _9_CycleLink { static class ListNode { int val; ListNode next; public ListNode(int val, ListNode next) { thi...原创 2022-04-09 08:43:41 · 380 阅读 · 0 评论 -
8.斐波那契数列优化
8.斐波那契数列优化 public static void main(String[] args) { System.out.println(fib2(6)); } //原始递归 private static int fib(int n) { if (n==1)return 1; if (n==0)return 0; return fib(n-1)+fib(n-2); } //优化原创 2022-04-09 08:35:38 · 211 阅读 · 0 评论 -
7.两数之和
给定一个整数数组 ,从数组中找出两个数满足相加之和等于目标数 target 。package com.spj.algorithm;import java.util.Arrays;import java.util.HashMap;import java.util.Map;/* *@program:架构师 *@Author:peng *@Time:2022/4/8 14:02 * */public class _7_towSum { public static void原创 2022-04-08 14:26:43 · 212 阅读 · 0 评论 -
6.三个数的最大乘积
一个整型数组 arr,在数组中找出由三个数字组成的最大乘积,并输出这个乘积。 public static void main(String[] args) { int []arr=new int[]{-10,-7,3,6,9,1,5}; System.out.println(getMax(arr)); } private static int getMax(int[] arr) { Arrays.sort(arr);原创 2022-04-08 13:51:57 · 210 阅读 · 0 评论 -
5.x的平方根
在不使用 sqrt(x) 函数的情况下,得到 x的平方根的整数部分 public static void main(String[] args) { System.out.println(binarySearch(10)); } private static int binarySearch(int x) { int low=0,height=x,mid = -1; while (low<=height){原创 2022-04-08 13:42:08 · 102 阅读 · 0 评论 -
4.删除数组中的重复项
一个数组 nums ,原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。public static void main(String[] args) { int[]arr=new int[]{9,4,6,2,2,4,1,5}; Arrays.sort(arr); System.out.println(deleteRepeat(arr)); } private static int deleteRepeat(原创 2022-04-08 13:28:31 · 366 阅读 · 0 评论 -
3.中心索引下标
数组中某一个下标,左右两边的元素之和相等,该下标即为中心索引 public static void main(String[] args) { int index=midIndex(new int[]{1,7,3,6,5,6}); System.out.println(index); } static int sum(int []arr){ int sum=0; for (int i = 0; i < arr原创 2022-04-07 18:47:45 · 189 阅读 · 0 评论 -
2.统计素数个数
public class _2_countPrimes { public static void main(String[] args) { System.out.println(countPrimes(100)); } static int countPrimes(int x){ int count=0; for (int i = 2; i < x; i++) { count+=isPrime(i)?1.原创 2022-04-07 18:33:29 · 218 阅读 · 0 评论 -
1.链表反转
一、迭代 public static ListNode iterate(ListNode head){ ListNode next,curr=head,prev=null; while (curr!=null){ next=curr.next; curr.next=prev; prev=curr; curr=next; } return pre原创 2022-04-07 18:26:46 · 377 阅读 · 0 评论 -
求二叉树某节点后继循环求解
递归相当与隐式的栈public class Main{ public int getSucc(TreeNode<Integer>root,int p){ if(root==null)return -1; Stack<TreeNode>stack=new Stack(); TreeNode<Integer>curr=root; boolean ...原创 2020-03-01 09:42:03 · 91 阅读 · 0 评论 -
递归求二叉树中某一节点的后继
public class Main{ public static int getSucc(BSTNode node,int p){ if(node==null)return succ; in(node,p); return succ; } public void in(BSTNode node,int p){ if(node==null)return; in(node...原创 2020-02-29 23:39:49 · 134 阅读 · 1 评论 -
判断是否是二叉树2
设置一个全局变量记录前一次的值就行比较public class Main(){ public static boolean checkBST(TreeNode root){ if(root==null)return true; if(!checkBST(root.left))return false;//检查左子 if(root.value<=pre)return fals...原创 2020-02-29 23:25:51 · 171 阅读 · 0 评论 -
判断树是否为二叉树
可中序遍历打印各节点,若为有序则为BST,否则不为public class Main(){ public boolead check(TreeNode<Integer>root){ if(root==null)return true; inorder(root); return checkOrder(list);} //递归的方式将节点按照中序遍历加入到列表中 ...原创 2020-02-29 22:51:51 · 351 阅读 · 0 评论 -
求BST某一层的所有节点
ListNode实现class ListNode<V>{ V value; ListNode next; public ListNode(V value){ this.value=value;} @Overridepublic String toString(){ ListNode p=next; StringBuilder sb=new StringBuilde...原创 2020-02-29 22:34:29 · 86 阅读 · 0 评论 -
判断二叉树是否平衡
法一public class isAVLTree{ public static boolean isBalance(BSTNode node){ if(node==null)return false; int min=getHeight(node.left)-getHeight(node.right);//左右子树高度差 return Math.abs(min)>1||isB...原创 2020-02-26 23:00:10 · 84 阅读 · 0 评论 -
求二叉树各路径上的数字串之和
public class getSum{ public int sunNumbers(BSTNode root){ if(root==null)return 0; public int sum=0; f("",root); for(int i=0;i<root.size();i++){ sum+=Integer.parseInt(list.get(i)); } ...原创 2020-02-26 18:07:51 · 272 阅读 · 0 评论 -
求一棵树的最大深度
punlic int getMaxDepth(BSTNode<K,V>root){ if(root==null)return 0; int leftDepth=getMaxDepth(root.left);//向左追溯 int rightDepth=getMaxDepth(root.right);//向右追溯 if(leftHeight==0||rightHeight==0)r...原创 2020-02-26 17:29:17 · 506 阅读 · 0 评论 -
二叉树
BinarySearchTreeBSTNodepublic class BSTNode<K,V>{public K key;public V value;public BSTNode<K,V>parent;public BSTNode<K,V>left;public BSTNode<K,V>right;public boolean i...原创 2020-02-26 01:40:10 · 62 阅读 · 0 评论 -
求hashCode值的几种方法
求hashCode值的几种方法public class HashFunction{ /*取余法*/ static int hash1(Object x,int prime){ return x.hashCode()%prime;}/*加法*/ static int additiveHash(Object key,int prime){ String objStr=key.t...原创 2020-02-13 11:57:05 · 428 阅读 · 0 评论 -
求有环链表环的起点
求有环链表环的起点可设快慢两个指针,当慢指针走一步时,快指针走两步。假设头节点距离环起点有k步,则当慢指针p1走到环起点时,慢指针p1与快指针p2相距k布,若环长度为l,此时看成p2追赶p1则p2与p1相距l-k步数,从此时开始当p1走l-k步时p1与p2相遇,此时在定义一个指向头节点的指针p,p与p1同时向前走,两者相遇点即为环的起点。class ListNode{ Object val;...原创 2020-02-13 11:18:00 · 118 阅读 · 0 评论 -
链表相加
链表相加两个链表个十百位分别相加,大于十则进一class ListNode{ Object val; ListNode next; public ListNode(Object val) { this.val=val; } @Override public String toString() { StringBuilder sb=new StringBuilder(); ...原创 2020-02-13 10:48:18 · 108 阅读 · 0 评论 -
给定值区分链表
定值区分链表给一个定值x,将链表分为两部分,小于x的放在左边,大于x的放在右边.可设置两个链表分别为leftHead与leftTail,rightHead与rightTail用与存储大于或小于x的值,最后在将两个链表连接起来即可class ListNode{ int value; ListNode next=null; public ListNode(int value){ thi...原创 2020-02-13 10:14:26 · 102 阅读 · 0 评论 -
找出链表倒数第K个元素
找出链表倒数第K个元素思路:可设两个头指针p1和p2,当p2开始向前走,当走的步数为k时,p1开始走,此时当p2走到结尾时,p1所指的位置正好为倒数第k个元素的位置class ListNode{ Object val; ListNode next; ListNode(Object val){ this.val=val;}@Overridepublic String toStrin...原创 2020-02-09 12:31:15 · 175 阅读 · 0 评论 -
删除未排序链表中重复的元素
1 删除未排序链表中重复的元素思路:可用hash表判重,若重复则删除否则就加入hash表中public class deleteRepeation{ public static void main(String[]args){ Node head=new Node(null); Node p=head; int arr[]= {1,6,3,5,7,6,64,2,7,5,3,2,2...原创 2020-02-09 12:13:27 · 370 阅读 · 1 评论 -
插入排序与希尔排序
static void shellSort(int[]arr) { for(int interval=arr.length/2;interval>0;interval=interval/2) { for(int i=interval;i<arr.length;i++) { int target=arr[i]; int j=i-interval; whi...原创 2019-11-01 07:00:44 · 75 阅读 · 0 评论 -
关于冒泡排序
思想:前一项与后一项比较,如果前一项大于后一项,两者交换位置如有数组ary[4,3,5,2,1]第一轮:4>3 —>交换 [3,4,5,2,1]4<5 —>不交换 [3,4,5,2,1]5>2 —>交换 [3,4,2,5,1]5>1 —>交换 [3,4,2,1,5]第一轮比较完后结果将最大的数放在最后一位,且比较次数为4第二轮...原创 2019-10-30 07:19:14 · 127 阅读 · 1 评论 -
求解二进制中1的个数
1.左移与运算Scanner sc=new Scanner(System.in);int N=sc.nextInt();int count=0;//->用于计数for(int i=0;i<32;i++){ if(N&(1<<i)==(1<<i){ count++; }}//1&x=x//如5的二进制为101//101&...原创 2019-10-30 06:19:41 · 130 阅读 · 0 评论