算法学习
自己学习的算法!
伦敦看日出
O Captain! My Captain!
展开
-
笔试强训48天day01
组队竞赛牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。例如:一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。如样例所示:如果牛牛把6个队员划分到两个队伍原创 2022-03-03 21:17:20 · 264 阅读 · 6 评论 -
剑指 Offer 55 - I. 二叉树的深度
分析:普通递归调用/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int maxDepth(TreeNode root) { if(.原创 2021-11-05 09:34:20 · 3969 阅读 · 1 评论 -
LeetCode 110.平衡二叉树
分析:子问题思路:要判断一棵树平衡,可以先判断根结点是否平衡,再判断,根的左子树和右子树是否平衡。代码:class Solution { public boolean isBalanced(TreeNode root) { if(root == null) { return true;//判断根结点 } int leftHight = maxDepth(root.left); int rightHigh.原创 2021-10-10 16:55:53 · 106 阅读 · 0 评论 -
牛客刷题:替换空格
分析:先将字符串转换为数组,然后遍历数组,当数组的元素为’ '时,将该元素替换为"%20",替换完以后,再将得到的数组变为字符串返回。public class Solution { public static String replaceSpace(StringBuffer str) { int length = str.length(); char[] array = new char[length*3]; int sum = 0; .原创 2021-11-05 16:33:54 · 92 阅读 · 0 评论 -
二分法(折半查找法)简解
二分查找法又称折半查找,是一种在有序数组中查找特定元素的搜索算法。其优点是查找速度快,缺点是要求待查表为有序表可实用性较弱。举个例子:在一段有序数组中查找是否含有需要查找的数,如果有请输出该查找的数在数组的位置,输出数组的下标。如果没有请输出“找不到”。#include<stdio.h>#include<string.h>int er(int a[],int k,int sz){ int l=0;//左边 int r=sz-1;//右边 while原创 2021-02-26 23:53:17 · 561 阅读 · 0 评论 -
冒泡排序优解
1:直接冒泡 #include<stdio.h>int main(){ int i,j; int t; int a[]={10,9,8,7,6,5,4,3,2,1};//此排序实现顺序排序 int s=sizeof(a)/sizeof(a[0]);//求数组元素个数 for(i=0;i<s-1;i++)//确定排序的趟数 { //下面为每趟冒泡排序 for(j=0;j<s-1-i;j++)原创 2021-02-22 10:40:42 · 1029 阅读 · 2 评论 -
快速排序明解
快速排序:是对冒泡排序算法的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。例如有一个数字序列: 5 0 1 6 8 2 3 4 9 7对其进行快速排序变为:0 1 2 3 4 5 6 7 8 9思路如下:首先将要排序的序列的首个数字5定位比较数,这是一个参考对象!然后的方法很简单:分别从序列的两端进行比较。先从右边原创 2021-03-20 12:16:35 · 122 阅读 · 0 评论