数据结构与算法
weixin_42956047
这个作者很懒,什么都没留下…
展开
-
【LeetCode-25】25.K个一组翻转链表
25. K 个一组翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。参考思路学习/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x;原创 2020-06-04 01:38:56 · 113 阅读 · 0 评论 -
【并查集】并查集(Union-Find)算法框架
并查集(Union-Find)算法框架class UF { // 记录连通分量个数 private int count; // 存储若干棵树 private int[] parent; // 记录树的“重量” private int[] size; public UF(int n) { this.count = n; parent = new int[n]; size = new int[n];原创 2020-05-26 15:02:12 · 273 阅读 · 0 评论 -
算法刷题套路+答题框架总结
BFS 算法框架套路详解双指针技巧总结滑动窗口解题套路总结二分查找解题套路框架回溯算法解题套路框架动态规划答疑篇动态规划解题套路框架摘自:推荐刷算法题必看+超级有用原创 2020-05-23 21:43:51 · 487 阅读 · 0 评论 -
双指针技巧总结
双指针技巧总结一、快慢指针的常见算法1、判定链表中是否含有环经典解法就是用两个指针,一个跑得快,一个跑得慢。如果不含有环,跑得快的那个指针最终会遇到 null,说明链表不含环;如果含有环,快指针最终会超慢指针一圈,和慢指针相遇,说明链表含有环。boolean hasCycle(ListNode head) { ListNode fast, slow; fast = slow = head; while (fast != null && fast.next !=转载 2020-05-23 21:33:43 · 294 阅读 · 0 评论 -
二分查找(区分边界情况)
最基本的二分查找算法:int binary_search(int[] nums, int target) { int left = 0, right = nums.length - 1; while(left <= right) { int mid = left + (right - left) / 2; if (nums[mid] < target) { left = mid + 1; } else原创 2020-05-23 17:05:10 · 142 阅读 · 0 评论 -
添加字符(牛牛手里有一个字符串A,羊羊的手里有一个字符串B,B的长度大于等于A,所以牛牛想把A串变得和B串一样长,这样羊羊就愿意和牛牛一起玩了。)
添加字符题目描述牛牛手里有一个字符串A,羊羊的手里有一个字符串B,B的长度大于等于A,所以牛牛想把A串变得和B串一样长,这样羊羊就愿意和牛牛一起玩了。而且A的长度增加到和B串一样长的时候,对应的每一位相等的越多,羊羊就越喜欢。比如"abc"和"abd"对应相等的位数为2,为前两位。牛牛可以在A的开头或者结尾添加任意字符,使得长度和B一样。现在问牛牛对A串添加完字符之后,不相等的位数最少有多少位?输入描述:第一行为字符串A,第二行为字符串B,A的场地小于等于B的长度,B的长度小于等于50.字符均为原创 2020-05-19 12:56:34 · 758 阅读 · 0 评论 -
给定一个int数组,拼接出最大值(求数组中所有数拼成的最大数)
给定一个整数,拼接出最大值(求数组中所有数拼成的最大数)public class ZhiJieTiaoDong { /* 给定一个数组:组合成最大数值 */ public String szpj(int[] args){ if(null == args || args.length == 0){ return ""; } StringBuilder stringBuilder = new S转载 2020-05-15 08:58:18 · 2935 阅读 · 0 评论 -
【拼多多】Java实现大整数相乘
大整数相乘链接:https://www.nowcoder.com/questionTerminal/0f0badf5f2204a6bb968b0955a82779e来源:牛客网有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。输入描述:空格分隔的两个字符串,代表输入的两个大整数输出描述:输入的乘积,用字符串表示示例1输入72106547548473106236 982161082972751393输出708202448296345380原创 2020-05-15 01:26:39 · 202 阅读 · 0 评论 -
两个大数相加
两个大数相加https://blog.csdn.net/zangdaiyang1991/article/details/92400058原创 2020-05-15 01:14:22 · 128 阅读 · 0 评论 -
堆排序
堆排序实现https://www.cnblogs.com/chengxiao/p/6129630.html原创 2020-05-15 00:56:35 · 81 阅读 · 0 评论 -
最长子序列&最长子串的题型汇总
最长子序列和最长字串的题型汇总原创 2020-05-14 22:00:01 · 161 阅读 · 0 评论 -
【牛客】不重复打印排序数组中相加和为给定值target的所有三元组
题目描述给定排序数组arr和整数k,不重复打印arr中所有相加和为k的不降序三元组。例如, arr = [-8, -4, -3, 0, 1, 2, 4, 5, 8, 9], k = 10,打印结果为:-4 5 9-3 4 9-3 5 80 1 90 2 81 4 5[要求]时间复杂度为O(n^2),空间复杂度为O(1)输入描述:第一行有两个整数n, k接下来一行有n个整数表示数组内的元素输出描述:输出若干行,每行三个整数表示答案按三元组从小到大的顺序输出(三元组大小比较方式为原创 2020-05-14 20:13:39 · 399 阅读 · 0 评论 -
图的m着色问题
图的m着色问题题目:题目描述给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色,请输出着色方案。输入输入第一行包含n,m,k分别代表n个结点,m条边,k种颜色,接下来m行每行有2个数u,v表示u和v之间有一条无向边,可能出现自环边,所以请忽略自环边。输出输出所有不同的着色方案,且按照字典序从小到大输出方案。样例输入 Copy3 3 31 21 32 3样例输出 Copy1 2 31 3 22 1转载 2020-05-14 19:00:37 · 433 阅读 · 0 评论 -
【剑指Offer】最小的k个数(Min K)+ Top K
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。优先权队列实现求最小Kimport java.util.ArrayList;import java.util.PriorityQueue;import java.util.Queue;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] .原创 2020-05-14 16:59:02 · 118 阅读 · 0 评论 -
快速排序
快速排序import java.util.Scanner;public class quickSortReference { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String[] split = scanner.nextLine().split(","); int array[] = new int[split.le原创 2020-05-14 15:05:47 · 63 阅读 · 0 评论 -
求二叉树两节点的LCA(最近公共祖先)(必须要会+常考)+求叶子节点到LCA的距离+求两个叶子节点之间的距离
两个节点分别在最近公共祖先的左、右子树上其中一个节点同时在最近公共祖先的左子树或者有子树上(当从根节点开始遍历到一个节点A等于这两个节点中的其中一个节点,A即为最近祖先节点)二叉树中任意两个节点的最近祖先节点(LCA):最近祖先节点就是从根节点遍历到给定节点时的最后一个相同节点。如上图,H和J的最低祖先节点是A。因为从根节点Root到H的链路为: Root A C H从根节点Root到J的链路为: Root A D J查看链路节点可知,A是最后一.原创 2020-05-09 01:16:12 · 762 阅读 · 0 评论 -
【牛客-华为笔试练习】明明的随机数(对输入的数字利用TreeSet实现去重和排序)
题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成 “去重”与“排序” 的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。Input Pa...原创 2020-04-29 18:28:21 · 379 阅读 · 0 评论 -
Java判断一个数是否是2的n次幂
二进制中n一旦是2的幂次方(只出现一个1),必为10,100,1000,10000,100000,…形式;并且n-1为01,011,0111,0111,01111形式。方法:n,n-1两个数按位与&等于零,则为2的幂次方class Solution { public boolean isPowerOfTwo(int n) { return n > 0 &&...原创 2020-04-01 00:15:05 · 2974 阅读 · 0 评论