算法学习
Whynotwu
源于生活,而高于生活。
展开
-
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。import java.util.*;public class Solution { /** * @param str string字符串 输入字符串 * @param k int整型 左移位数原创 2021-08-08 15:19:07 · 625 阅读 · 0 评论 -
单链表的选择排序
描述给定一个无序单链表,实现单链表的选择排序(按升序排序)。要求:额外空间复杂度是O(1)。原创 2021-06-18 21:12:38 · 662 阅读 · 2 评论 -
在链表中删除指定值的节点(两种解决方法)
描述给出一个链表和一个整数num,输出删除链表中节点值等于num的节点之后的链表。示例1输入:4 1 2 3 43输出:1 2 4原创 2021-06-18 16:51:06 · 1585 阅读 · 1 评论 -
删除无序链表中值重复出现的节点(两种解决方法)
描述给定一个无序链表,删除其中值重复出现的节点(保留当中顺序遍历第一个出现的节点)。示例1输入:51 3 2 3 1输出:1 3 2原创 2021-06-18 15:58:51 · 1181 阅读 · 0 评论 -
合并两个有序的单链表
描述给定两个升序的单链表的头节点head1和head2,请合并两个升序链表,合并后的链表依然升序,并返回合并后链表的头节点。原创 2021-06-18 11:55:20 · 353 阅读 · 1 评论 -
两个链表生成相加链表
描述假设链表中每一个节点的值都在 0 - 9之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。例如:链表 1为 9->3->7,链表 2为 6->3,最后生成新的结果链表为 1->0->0->0,937+63=1000。方法一:解题思路:利用两个栈,先将每个链表各自压入栈,链表 1为9->3->7压入s1栈就变成自顶向下7,3,9 链表 2为 6->3压入s2栈就变成自顶...原创 2021-06-18 01:01:42 · 387 阅读 · 1 评论 -
反转部分单向链表
描述给定一个单链表,在链表中把第L个节点到第 R 个节点这一部分进行反转。示例1输入:51 2 3 4 51 3输出:3 2 1 4 5原创 2021-06-17 22:50:38 · 442 阅读 · 0 评论 -
反转单向链表和双向链表
描述实现反转单向链表和双向链表的函数。如 1->2->3 反转后变成 3->2->1。示例1输入:31 2 341 2 3 4输出:3 2 14 3 2 1原创 2021-06-17 20:28:28 · 264 阅读 · 0 评论 -
输出链表中倒数最后k个结点
描述输入一个链表,输出一个链表,该输出链表包含原链表中从倒数第k个结点至尾节点的全部节点。如果该链表长度小于k,请返回一个长度为 0 的链表。示例1输入:{1,2,3,4,5},1 返回值:{5} ...原创 2021-06-17 01:05:38 · 306 阅读 · 0 评论 -
删除链表第 K 个节点
描述给定一个链表,实现删除链表第K个节点的函数。输入描述:n 表示链表的长度。m 表示删除链表第几个节点。val 表示链表节点的值。输出描述:在给定的函数中返回链表的头指针。示例1输入:5 31 2 3 4 5输出:1 2 4 5...原创 2021-06-17 00:30:16 · 963 阅读 · 0 评论 -
在链表中删除倒数第K个节点
描述给出一个单链表,返回删除单链表的倒数第 K 个节点的链表。输入描述:n 表示链表的长度。val 表示链表中节点的值。输出描述:在给定的函数内返回链表的头指针。示例1输入:5 41 2 3 4 5输出:1 3 4 5...原创 2021-06-16 22:10:13 · 246 阅读 · 0 评论 -
打印两个升序链表的公共部分
描述给定两个升序链表,打印两个升序链表的公共部分。输入描述:第一个链表的长度为 n。第二个链表的长度为 m。链表结点的值为 val。输出描述:输出一行整数表示两个升序链表的公共部分的值 (按升序输出)。示例1输入:41 2 3 451 2 3 5 6输出:1 2 3...原创 2021-06-16 18:26:38 · 187 阅读 · 0 评论 -
用一个栈实现另一个栈的排序
import java.util.Scanner;import java.util.Stack;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main { public static void sortStackByStack(Stack<Integer> stack){ Stack<Integer> help =new Stack<Integer>(); ...原创 2021-06-16 00:12:04 · 171 阅读 · 0 评论 -
猫狗队列实现
描述实现一种猫狗队列的结构,要求如下:1.用户可以调用add方法将cat或者dog 放入队列中2.用户可以调用pollAll方法将队列中的cat和dog按照进队列的先后顺序依次弹出3.用户可以调用pollDog方法将队列中的dog按照进队列的先后顺序依次弹出4.用户可以调用pollCat方法将队列中的cat按照进队列的先后顺序依次弹出5.用户可以调用isEmpty方法检查队列中是否还有dog或cat6.用户可以调用is...原创 2021-06-15 23:36:16 · 273 阅读 · 0 评论 -
用递归函数和栈逆序一个栈
描述一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。输入描述:输入数据第一行一个整数N为栈中元素的个数。接下来一行N个整数XiX_iXi表示从栈顶依次到栈底的每个元素。输出描述:输出一行表示栈中元素逆序后的每个元素示例1输入:51 2 3 4 5输出:5 4 3 2 1...原创 2021-06-15 16:23:52 · 194 阅读 · 0 评论 -
用两个栈实现队列,支持队列的基本操作。
描述用两个栈实现队列,支持队列的基本操作。输入描述:第一行输入一个整数N,表示对队列进行的操作总数。下面N行每行输入一个字符串S,表示操作的种类。如果S为"add",则后面还有一个整数X表示向队列尾部加入整数X。如果S为"poll",则表示弹出队列头部操作。如果S为"peek",则表示询问当前队列中头部元素是多少。输出描述:对于每一个为"peek"的操作,输出一行表示当前队列中头部元素是多少。示例1输入:6add 1add 2add 3peekpollp原创 2021-06-15 14:18:44 · 344 阅读 · 0 评论 -
设计getMin功能的栈
描述实现一个特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。输入描述:第一行输入一个整数N,表示对栈进行的操作总数。下面N行每行输入一个字符串S,表示操作的种类。如果S为"push",则后面还有一个整数X表示向栈里压入整数X。如果S为"pop",则表示弹出栈顶操作。如果S为"getMin",则表示询问当前栈中的最小元素是多少。输出描述:对于每个getMin操作,输出一行表示当前栈中的最小元素是多少。...原创 2021-06-15 01:10:42 · 205 阅读 · 1 评论 -
几种常见排序(冒泡排序、插入排序、选择排序)
有序度逆序度 = 满有序度 - 有序度。我们排序的过程就是一种增加有序度,减少逆序度的过程,最后达到满有序度,就说明排序完成了。我还是拿前面举的那个冒泡排序的例子来说明。要排序的数组的初始状态是 4,5,6,3,2,1 ,其中,有序元素对有 (4,5) (4,6)(5,6),所以有序度是 3。n=6,所以排序完成之后终态的满有序度为 n*(n-1)/2=15。冒泡排序包含两个操作原子,比较和交换。每交换一次,有序度就加 1。不管算法怎么改进,交换次数总是确定的,即为逆序度,也就是n*(n原创 2021-03-06 17:15:50 · 382 阅读 · 0 评论 -
二分法(折半查找法)查找第一个大于等于给定值的元素
在arr数组上,找满足>=value的最左位置带有对数器的二分查找1、查找第一个大于等于给定值的元素public class Code05_BSNearLeft { //在arr上,找满足>=value的最左位置 O(logn) public static int nearestIndex(int[] arr,int value){ int L=0; int R=arr.length-1; int index = -原创 2021-06-13 23:36:12 · 3685 阅读 · 0 评论 -
二分法(折半查找法)局部最小问题
局部最小问题,无序数组中找到一个局部最小即可分为三种情况 0<1 小/ N-1>N \ \ 先降后升,中间必定存在局部最小 /只要具有排他性的问题都可以用二分public class Code07_BSAwesome { //局部最小问题,无序数组中找到一个局部最小即可 //arr是无序数组 public static int getLessIndex(int[]arr){ if(arr==null||arr.length=..原创 2021-06-13 23:19:20 · 463 阅读 · 0 评论 -
二分法(折半查找法)存在性问题
利用二分法(折半查找法)判断一个有序数组是否存在某个值O(logn) 惊人的查找速度假设数据大小是 n,每次查找后数据都会缩小为原来的一半,也就是会除以 2。最坏情况下,直到查找区间被缩小为空,才停止。二分查找应用场景的局限性(只是在查找上)首先,二分查找依赖的是顺序表结构,简单点说就是数组。其次,二分查找针对的是有序数据。再次,数据量太小不适合二分查找。最后,数据量太大也不适合二分查找。public class Code04_BSExit { // 利用二分法(折半查找法)原创 2021-06-13 23:26:35 · 797 阅读 · 0 评论