![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
算法练习
尘荒
这个作者很懒,什么都没留下…
展开
-
013-二叉链表的遍历
使用线索二叉树的方式来对二叉链表进行遍历操作(1)前序遍历// 线索二叉树// 时间复杂度为o(n) 使用空闲指针来解决空间复杂度// morris实现遍历 前序遍历 public static void morrisPre(TreeNode cur) { if(cur == null)return; //最右边的节点 TreeNode mostRright = null; while(cur.原创 2022-05-09 18:46:18 · 314 阅读 · 0 评论 -
013-二叉树的遍历操作
前提 public class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode() { } public TreeNode(int val) { this.val = val; } public TreeNode(int val, TreeNode left, TreeNode right) {原创 2022-05-08 19:45:09 · 631 阅读 · 0 评论 -
012-求二叉树最大最小深度
二叉树 public class TreeNode { int val; TreeNode left; TreeNode right; int deep; public TreeNode() { } public TreeNode(int val) { this.val = val; } public TreeNode(int val, TreeNode left, TreeNode r原创 2022-05-07 19:28:52 · 320 阅读 · 0 评论 -
011-合并两个有序数组
将两个已经排好序的数据 合并成一个排好序的数组(1)使用Java特定的函数//m表示的num1的数组长度 n表示的是num2的数组长度 public static int []merge(int []num1,int m,int []num2,int n){ //要复制的数组 开始位置 复制到那个数组中 从那个位置开始 复制多少个元素 System.arraycopy(num2,0,num1,m,n); Arrays.sort(num1); ret.原创 2022-05-06 18:08:38 · 303 阅读 · 0 评论 -
010-环形链表
存在环 返回ture 不存在则返回false(1)借助set集合 public static boolean cycleListOne(ListNode head) { Set<ListNode> set = new HashSet<>(); while(head!=null)//如何添加不成功 那么必然存在一个环 { if(!set.add(head)) retur.原创 2022-05-05 18:47:46 · 287 阅读 · 0 评论 -
009-排列硬币
找到(n+1)*n/2 与所给硬币数最接近的n(1)直接遍历寻找public static int arrangeCoins(int n) { for(int i =1;;i++) { n-=i; if(n<=i) return i; } }(2)二分法进行查找 public static int arrangeCoinsTwo(int n) .原创 2022-05-05 18:43:54 · 140 阅读 · 0 评论 -
008 -菲波那切数列
对第n位菲波那切数列的值进行求解菲波那切数列(1)递归方法实现//递归实现斐波那契数列 public static int calculateOne(int num) { if(num==0)return 0; if(num==1)return 1; return calculateOne(num-1)+calculateOne(num-2); }(2)去重递归方法实现//去重递归的方法实现菲波那切数列 public s.原创 2022-05-04 18:34:49 · 185 阅读 · 0 评论 -
007-两数之和
给定一个数组 和 一个指定的数 将 数组中两数之和等于给定的数的下标进行返回无序数组(1)暴力求解 public static int [] ontSolution(int [] nums,int target) { for (int i = 0; i < nums.length-1; i++) { for(int j = i+1;j<nums.length;j++) { if.原创 2022-05-04 09:03:54 · 45 阅读 · 0 评论 -
006-数组中三个数的最大乘积
数组中三个数最大乘积 一 全是正数 二 全是负数 这个的话排序后 选择后三个数就是最大乘积数 三是 有正有负 那么 应该选择排序后的前两个负数的和最后的正数的乘积排序后求解public static int totalSum(int [] nums){ Arrays.sort(nums); int len = nums.length; return Math.max(nums[0]*nums[1]*nums[len-1],nums[len-1]*nums[len-2]*nums[len.原创 2022-05-04 08:57:52 · 84 阅读 · 0 评论 -
005-x的平方根
不直接使用Math.sqrt()函数来求一个数的平方根 使用自己的方法来进行求解二分查找的方法来实现x的平方根的求解public static int binarySearch(int x){ int index = -1,left = 0,right = x; while(left<=right) { int mid = (left+right)/2; if(mid*mid<=x) { index = mid; left = mid+1; } e.原创 2022-05-04 08:50:53 · 278 阅读 · 0 评论 -
004-寻找数组的中心下标
中心下标 通俗的讲 就是位于坐标左边的所有数之和 等于 右边所有数之和的存在public static int search(int []nums){ int result = 0,total = 0; for(int i =0;i<nums.length;i++) result +=nums[i]; for(int i =0;i<nums.length;i++) { total+=nums[i]; if(total==result) result i ; .原创 2022-05-04 08:43:56 · 144 阅读 · 0 评论 -
003-删除数组中的重复元素
使用双指针的方法来实现对数组中重复元素的去重操作同时返回数组中当前元素的个数public static int getRemove(int [] array){ if(array.length ==0) return 0; int i = 0; for(int j = 1;j < array.length;j++) { if(array[j]!=array[i])//不相等则进行递进赋值 { i++; array[i]=array[j]; } } re.原创 2022-05-04 08:37:38 · 219 阅读 · 0 评论 -
002-统计素数个数
素数就是只有1和本身是它的一个因式 1既不是素数也不是合数下面介绍两种方法来实现素数个数元素的统计方法暴力算法实现素数个数的统计 public static int bf(int n ) { int count = 0; for(int i =2;i<=n;i++) { count+=isPrime(i)?1:0; } return count; }> 对于整体寻找一个数的因式的时候 只需要遍历到Math.sqrt(x)的时候就可以了 比这个数更大的话.原创 2022-05-04 08:25:40 · 726 阅读 · 0 评论 -
001-链表反转
递归实现列表反转的叙述public static ListNode recursion(ListNode head){ //递归结束的条件 if(head==null||head.next==null)return null; //对下一个节点进行反转操作 递归进行 ListNode det = recursion(head.next); //将原先连接的实现反转操作 head.next.next = head; head.next = null; return det;}..原创 2022-05-04 08:07:20 · 454 阅读 · 0 评论 -
排序算法
对输入的n个整数进行排序输入样例94 3 5 6 1 9 8 2 7自带的排序算法–从小到大进行排序#include<iostream>#include<algorithm>using namespace std;int main(){ int n; cin>>n; int *a=new int [n+1]; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n);//从小到大进行排序原创 2021-03-13 20:57:52 · 84 阅读 · 0 评论 -
2021-03-07
快速排序今天来写一下快速排序的代码;测试数据 就自己编一下吧 哈哈哈请输入您要进行排序的数据个数:11请依次输入您要进行排序的数据:5 7 3 6 45 9 26 10 1 8 37快速排序1 (以中间值为区分点)#include<iostream> using namespace std;void quicksort(int *p,int l,int s){ int mid,temp; int i=l,j=s; mid=p[(l+s)/2];//中间值 do {原创 2021-03-07 20:25:20 · 75 阅读 · 0 评论 -
求1-100之间的素数个数 2021-03-06
求1-100之间的素数第一次在CSDN上发表文章,这也是第一次的尝试吧,当做是自己作为程序员路点点滴滴的见证.有时间的话,我也要把自己学过的东西及时的整理并记录下来,希望可以帮助他人,也方便我之后的回忆.今天我就使用C/C++代码来计算1到100之间的素数这道题;方法一#include<iostream> #include<cmath>#include<iomanip>//调用setw函数的时候需要调用该库 using namespace std;int原创 2021-03-06 15:25:56 · 679 阅读 · 1 评论