
算法
绿头龙
don't think,feel it
展开
-
力扣 20. 有效的括号
给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false示例4:输...原创 2019-10-09 21:06:29 · 147 阅读 · 0 评论 -
力扣233.数字1出现的次数
这个老哥讲的逻辑很清晰!版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.youkuaiyun.com/yi_Afly/article/details/520125931. 题目描述输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和1...转载 2019-10-12 20:06:43 · 372 阅读 · 0 评论 -
选择排序
选择排序算法特点:数据移动的次数是最少。运行时间与输入无关。思想:找到数组中最小的那个元素,其次将他与数组的第一个元素交换位置。然后在剩下的元素中找到最小的元素,将他数组中的第二个元素交换位置。如此往复,直到整个数组有序。public class Main { public static void main(String[] args) { int arr[] = {3,2,1,4,5,7,4,8,10,9,0}; System.out.println(原创 2020-10-06 14:56:50 · 83 阅读 · 0 评论 -
排序算法--冒泡排序
算法步骤:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。/** * @author zjq * @date 2020/7/29 17:09 */public class BubbleSortDemo { public static void main(Strin原创 2020-09-10 01:11:55 · 277 阅读 · 0 评论 -
二分查找
/** * @author zjq * @date 2020/6/30 18:22 */public class Demo { public static void main(String[] args) { int arr[] = {1,8,10,89,1000,1234}; int index = BinarySearch(arr,0,arr.length-1,8); System.out.println(index); }原创 2020-09-10 00:41:43 · 101 阅读 · 0 评论 -
快速排序
参考为:https://blog.youkuaiyun.com/MoreWindows/article/details/6684558快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。举个栗子:初始时,i = 0原创 2020-07-08 23:17:33 · 88 阅读 · 0 评论 -
插入排序
算法步骤将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)代码:public class Demo02 { public static void main(String[] args) { int arr[] = {9,1,4,2,5,3,7,6,8}; inser.原创 2020-07-08 17:50:51 · 149 阅读 · 0 评论 -
二分查找
使用二分查找的前提为该数组有序!思路分析:先确定该数组的中间下标 mid = (left+right)/2然后让需要查找到数findVal与mid比较finaVal>mid,说明查找的数在mid的右边,因此需要递归向右查找finaVal=mid,说明找到,返回即可finaVal<mid,说明查找的数在mid的左边,因此需要递归向左查找什么时候结束递归?找到就结束递归完整个数组,仍然没有找到findVal,也需要结束递归当left>right,也需要退出递归原创 2020-06-30 22:47:28 · 170 阅读 · 0 评论 -
剑指offer--替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:对字符串We Are Happy进行遍历吗,当遍历到' '位置时,使用append()函数将"%20"追加到后面.不用setCharAt(int,ch)是因为ch只能为一个字符.package 例题;import java...原创 2019-12-16 18:39:02 · 101 阅读 · 0 评论 -
合并排序
#include<stdio.h>void marge(int arr[],int L,int M,int R){ int Left_size = M-L; int Right_size = R-M+1; int left[Left_size]; int right[Right_size]; int i,j,k; //写入左数组...原创 2019-07-07 10:47:51 · 123 阅读 · 0 评论 -
快速排序、合并排序和分治策略的基本思想
分治策略的基本思想:就是对于一个问题规模为N的问题,将其划分为规模足够小的K个子问题,子问题由于规模足够小可以直接求解,最后将规模足够小的K的问题的解合并得出原问题的解。合并排序主要的思想:将待排序列拆分至数个足够小的子序列,然后将相邻子序列合并为一个有序子序列,重复合并相邻有序子序列直到整个序列有序。快速排序的主要思想:将待排序列拆分为左右两个子序列A,B,使得子序列A的元素都小于子序...原创 2019-07-04 13:41:58 · 1956 阅读 · 0 评论 -
动态规划的基本要素
1.最优子结构 当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。问题的最优子结构性质提供了该问题可用动态规划算法求解的重要线索。 在动态规划算法中,利用问题的最优子结构性质,以自底向上的方式递归地从子问题的最优解逐步构造出整个问题的最优解。2.重叠子问题 可用动态规划算法求解的问题应具备的另一个基本要素是子问题的重叠性质。在用...原创 2019-07-04 13:37:48 · 4247 阅读 · 0 评论 -
【转载】算法时间复杂度分析方法
算法时间效率分析方法主要由非递归分析法和递归式分析法两种。以下分别说明:一、分析非递归算法时间效率的通用方案确定算法中作为输入规模的参数; 找出算法的基本操作(通常位于算法的最内层循环中的操作); 检查对于相同规模的不同输入实例,基本操作的执行次数是否可能不同,如果有,则需对最差效率、平均效率以及最优效率分别进行讨论; 建立算法基本操作的执行频度的计算表达式; 利用计算表达式的计算...转载 2019-07-04 13:25:35 · 1246 阅读 · 0 评论 -
脱单狗福利!每天不同时间段给女友定时给女友发消息,不错过早上起床、中午吃饭、晚上吃饭、晚安时间!
目录每天不同时间段通过微信发消息提醒女友 简介 编写思路 使用教程 演示图片 完整源代码 每天不同时间段通过微信发消息提醒女友简介有时候,你很想关心她,但是你太忙了,以至于她一直抱怨,觉得你不够关心她。你暗自下决心,下次一定要准时发消息给她,哪怕是几句话,可是你又忘记了。你觉得自己很委屈转载 2019-06-17 19:40:01 · 684 阅读 · 0 评论