
数据结构和算法
文章平均质量分 51
数据结构和算法
玫瑰应急箱-
小菜鸡
展开
-
53. 最大子数组和
53. 最大子数组和给你一个整数数组 ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。两层for循环,遍历数组找出连续和最大值的数组。用count记录当前连续数组的和用result记录当前连续数组和的最大值贪心:本题指的是,当count为负数时,抛弃前面所有结果,count=0从零开始重新记录,也就是记录了子数组的开始位置。那么结束位置 可以用result代替,每计算出一个count的最大值就更新一次result完整代码:动态规划原创 2022-12-08 11:39:44 · 234 阅读 · 1 评论 -
647. 回文子串
3.初始化dp数组将dp数组初始化为false,遇到符合回文字符串的位置设置为true,就可以避免重复筛选从下到上,从左到右。因为要用到dp[i + 1][j - 1]就必须先计算5.打印dp检查结果 完整代码:原创 2022-12-05 16:00:18 · 261 阅读 · 0 评论 -
反转链表【递归】
今天复习递归的时候遇见了一个大家都觉得很简单的题:反转链表把自己别住了 想明白了觉得说这题用了这么久真的好丢人。。。。。。详细的写下来,如果下次遇见再不会 我就打死我自己。。。。题目:给你单链表的头节点head,请你反转链表,并返回反转后的链表。先把节点写出来public class Node { int val; Node next; Node() {} Node(int val) { this.val = val; } ...原创 2022-04-06 15:31:17 · 2387 阅读 · 0 评论 -
【回文数】
方法一:反转一半数字思路映入脑海的第一个想法是将数字转换为字符串,并检查字符串是否为回文。但是,这需要额外的非常量空间来创建问题描述中所不允许的字符串。第二个想法是将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。但是,如果反转后的数字大于int.MAX,我们将遇到整数溢出问题。按照第二个想法,为了避免数字反转可能导致的溢出问题,为什么不考虑只反转int 数字的一半?毕竟,如果该数字是回文,其后半部分反转后应该与原始数字的前半部分相同。例如,转载 2022-03-11 14:58:37 · 144 阅读 · 0 评论 -
【数据结构】斐波那契查找
斐波那契查找斐波那契数列 {1,1,2,3,5,8,13,21,34,55,89} 相邻两个数之比,越来越接近于黄金比例 0.618 改变了mid的位置 mid = low + F(k-1) -1 F(k)=F(k-1)+F(k-2) F(k)-1 = [F(k-1)-1]+[F(k-2)-1]+1 递归 f(k)-1 假如数列长度n不一定是F(k)-1 ,将n增加至f(k)-1即可 arr[right]...原创 2022-02-26 09:33:09 · 641 阅读 · 0 评论 -
【数据结构】 查找算法
线性查找二分查找插值查找线性查找逐一对比,有相同值时返回下表 contains()public static int search(int[] arr, int value) {for (int i = 0; i < arr.length; i++) {if (arr[i] == value) {return i;}}return -1;}}二分查找前提:待查找序列必须有序!!!!思路:找到数组的中间的下标:mid=(left+right..原创 2022-02-25 16:09:33 · 292 阅读 · 0 评论 -
【数据结构】双链表
java中的LinkedList底层就是使用的双向链表private static class Node<E> {E item;Node<E> next;Node<E> prev;Node(Node<E> prev, E element, Node<E> next) {this.item = element;this.next = next;this.prev = prev;}}补充:List(有序、可原创 2022-02-24 15:19:39 · 237 阅读 · 0 评论 -
【数据结构】 八皇后问题
目录递归思想递归数组求和八皇后问题递归思想八皇后问题 汉诺塔 阶乘、迷宫问题 快速排序、归并排序、二分查找、分治算法 递归数组求和 public static int sum(int[] arr,int i){//i:从第几位开始求和 if(i<arr.length-1){//如果取等号,数组索引越界 return arr[i]+sum(arr,i+1); }else { ..原创 2022-02-23 20:05:53 · 453 阅读 · 0 评论 -
【数据结构】 排序
排序:将一组数据按照顺序排列冒泡排序冒泡排序是一种简单的排序算法,一次比较两个元素,如果顺序错误,那么就进行交换,直到不需要交 换为止。 这个算法的名字,就是因为越小(大)的元素会经过交换慢慢浮出水面(数列的顶端)算法描述比较相邻的元素,如果第一个比第二个大,就交换它们两个 对每一对相邻的元素作同样的工作,从开始第一对到结尾的最后一对,这样的话,最后的元素会是 数列中最大的数 针对所有的元素重复以上步骤,除了最后一个 重复步骤,直至排序完成 public static int[] so原创 2022-02-10 09:33:10 · 672 阅读 · 0 评论 -
数据结构——数组的增删改查
目录基础数组二次封装数组(最基础部分)数组的增删改查数组的增加普通的数组已经确定了数组的大小,没办法进行扩容,也不能进行增删改查基础数组public class Main {public static void main(String[] args) {//创建数组arrint[] arr = new int[10];//给每一个元素赋值for (int i = 0; i < arr.length; i++) {arr[i]=i;}//使用foreach.原创 2022-01-24 22:44:51 · 2268 阅读 · 0 评论 -
数据结构——链表
目录1.链表2.节点实现(内部类)3.列表基本成员4.增删改查增加改进 虚拟头节点查询修改链表中某处的元素5 遍历操作1.链表链表是线性表最常见的两种表现方式之一数据储存在节点(Node)中 Node一般来说包括:元素、前驱、后继第一个节点的前驱是null,最后一个节点的后继是null真正地实现了动态,不需要考虑动态扩容的问题2.节点实现(内部类)public class LinkList<E> { private c.原创 2022-01-28 22:34:30 · 567 阅读 · 0 评论