数据结构&算法
文章平均质量分 61
基于Java的数据结构和算法, 以及练习
code tea
工作&学习中...记录日常偶有所得, 欢迎交流~~~
内容如有错漏, 请各位 dalao 批评指正~~~
展开
-
常见二分查找【变体问题】练习&解决思路(Java)
不知道你有没有听过这样一个说法:“十个二分九个错”。二分查找虽然原理极其简单,但是想要写出没有 Bug 的二分查找并不容易。唐纳德·克努特(Donald E.Knuth)在《计算机程序设计艺术》的第 3 卷《排序和查找》中说到:“尽管第一个二分查找算法于 1946 年出现,然而第一个完全正确的二分查找算法实现直到 1962 年才出现。”在不存在重复元素的有序数组中,查找值等于给定值的元素, 这是二分查找中最简单的一种情况, 实际使用过程中, 我们常常面临二分查找的变体问题。本文主要介绍以下四种常见.原创 2022-05-04 13:36:10 · 928 阅读 · 2 评论 -
二分查找练习
如何编程实现“求一个数的平方根”?要求精确到小数点后 6 位。先把求小数问题转换成求整数问题, 精度为1, 再除以10^6, 转换成小数先把要求的数 n*1012二分法求出这个数 n*1012 的平方根整数x, 要求 x2<=n*1012 并且 (x+1)2> n*1012将 x / 106 得到精确到小数点后6位的平方根 /** * 求一个数的平方根 * @param value 数 * @param accuracy 小数位数 * @re原创 2022-04-29 00:32:35 · 930 阅读 · 0 评论 -
归并排序&快速排序(Java)
1.归并排序1.1递推公式归并排序分解图递推公式:merge_sort(p…r) = merge(merge_sort(p…q), merge_sort(q+1…r))终止条件:p >= r 不用再继续分解1.2代码实现 /** * 归并排序 * * @param value */ public static void mergeSort(int[] value) { mergeSort(value, 0, v原创 2022-04-20 00:42:05 · 281 阅读 · 0 评论 -
简单排序练习(插入冒泡选择, Java)
冒泡排序冒泡排序, 最好情况时间复杂度O(n), 最坏情况时间复杂度O(n2), 平均情况时间复杂度O(n2)冒泡排序是稳定的排序算法冒泡排序是原地排序算法(空间复杂度O(1)) /** * 冒泡排序 * * @param value */ public static void bubbleSort(int[] value) { for (int i = 0; i < value.length - 1; i++) {原创 2022-04-19 00:27:15 · 444 阅读 · 0 评论 -
递归解决汉诺塔问题(个人思路)
递归解决汉诺塔问题有没有人想在了解递归后想自己动手实践下? 了解到汉诺塔问题可以用递归解决后, 我决定自己尝试下 :先说下我的思路 :递归的思路:递归一般用来解决的问题: 如果这个问题的上一步解决了, 问题的这一步应该很好处理所以思考递归应该采用逆向思维, 在解决上一步问题的基础上, 应该做什么?在写递归时,我们只需要确定两个条件:1.递归的核心公式是什么?2.递归何时结束?对于汉诺塔问题的分析举个例子:* 1.要解决把4个数从A柱移动到C柱 1234, A-->C* 在解原创 2021-07-05 20:32:26 · 273 阅读 · 0 评论 -
链表操作练习(Java)
1. 判断链表中是否有环 /** * 判断链表中是否有环 * 通过快慢指针法 * 思路: 快指针一次两步, 慢指针一次一步, * 如果链表中没有环, 快指针会到达尾节点, 如果链表中有环, 两指针会相遇 * 空间复杂度O(1), 时间复杂度O(n) * @return */ public static boolean isCircle(Node node) { //快慢指针 Node fast原创 2022-04-17 12:05:23 · 416 阅读 · 0 评论 -
单链表反转思路&实现&错误复盘(JAVA)
今天想练习下单链表反转, 实现思路不难, 没想到写代码出现这么多问题还是基础不扎实, 必须记录问题复盘一下!构建一个单链表类构建一个单链表的节点类, 单链表需要有:当前节点的值 (这是使用字符Character, 为了方便我通过字符串来构建一个字符链表)指向下一个节点的引用public class Node { private Node next; private Character value; public Node getNext() {原创 2022-04-13 22:23:53 · 252 阅读 · 0 评论 -
通过单链表判断字符串是否为回文字符串?
实现思路1. 找到中间节点(快慢指针法)快慢指针定位中间节点: 快指针一次两格, 慢指针一次一格, 快指针遍历完的时候慢指针所在就是中点。(这里要区分奇偶情况)2. 判断回文慢指针到达中间节点的过程中还可以做一件事,把走过的节点反转方向。然后在中间节点在开辟一个指针按反转的方向往回走, 慢指针继续向前, 当慢指针扫描完整个链表, 前后两段字符串反转方向后相等, 可以判断这是回文字符串。否则可以提前判断这个字符串不是回文字符串。3. 还原字符串新指针从中间节点往回走的过程中可以同时把反转过的节点原创 2022-04-11 22:24:42 · 1125 阅读 · 0 评论