数据结构与算法
文章平均质量分 51
woai3364
热爱技术,喜欢编程,保持初心。
展开
-
977. 有序数组的平方
①在一个非递减顺序排序的数组中,考虑到负数和正数,所以平方的最大值要么在数组的最左边,和最右边。创建一个一样大小的新数组。②一个指针指着数组的最左边,另一个指针指向数组的最右边,在循环里,比较两指针的数的平法,谁大就放在新数组的右端。解释:平方后,数组变为 [16,1,0,9,100]输入:nums = [-4,-1,0,3,10]输入:nums = [-7,-3,2,3,11]排序后,数组变为 [0,1,9,16,100]输出:[0,1,9,16,100]输出:[4,9,9,49,121]原创 2023-07-23 16:11:14 · 81 阅读 · 0 评论 -
704.二分查找、27.移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。二分查找思想:在一有限个且有序的数列中,将要查找的数与该数列的中值比较,若大于中值则目标数在数列的右半段,再取右半段的中值再与目标数比较,一直循环下去,最终会找到目标数的位置。运用暴力,直接遍历数组,若nums[i] == val,则将val后面的所有值都往前移一位。=val的值赋给慢指针所指的数组位置。原创 2023-07-03 23:06:44 · 59 阅读 · 0 评论 -
java单链表实现一个ListMap
思路:我们在写增逻辑时,其实是将增改放在一起的,我们先判断传入的key值是否为空,是否存在ListMap中,若存在就将原有的key节点修改val值,并将原来的val值返回,若不存在LsitMap中,咋们就创建一个节点接在头节点head后面(在链表里添加元素模块,我们必须找到前驱节点,head最好找到),最后将size++,别忘记了。思路:我们创建链表节点去实现Map.Entry接口,这个接口是标准库里的,你只要实现这里面的方法就可以称之为Map.主要就是存储键值对,即K,V。原创 2023-02-16 20:58:52 · 203 阅读 · 0 评论 -
java数组/链表实现栈和队列
栈(stack) 是限定仅在表尾进行插入或删除操作和线性表(只有一端口能进出数据),对栈来说表尾和表头有特殊含义,表尾被称为栈顶,表头被称为栈底,没有元素的空表称为空栈,元素数量达到栈的容量称为满栈,数据添加到栈中叫入栈、压栈,数据从栈中删除叫出栈、弹栈,由于栈元素特殊添加和删除的规则,所以栈的元素会先进后出的现象,简称为LIFO(Last in first out)。入栈的思路就是先将栈顶指针向上移一位,再直接赋值,前提需判断该栈是否满,当然栈满了,是不允许再进栈的。链表——实现队列:(双链表)原创 2023-02-07 15:03:52 · 565 阅读 · 0 评论 -
java实现链表
由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。4、我们在写一个数据结构时无非就是 增、删、查、改,还有一些像获取长度,判断是否为空的功能函数,我们在这添加两个检查索引是否越界函数。5、在链表中访问一个index 位置的节点值会很困难,必须遍历链表,我们将或取index位置的节点设置一个函数。3、设置头、尾节点和长度变量。原创 2023-02-05 15:49:15 · 856 阅读 · 0 评论 -
LeetCode:704.二分查找
注:①while(letf < right),这里使用“ < ” 是因为left 与 right 相同的情况在[ left , right )区间是没有意义的 ②如果nums [ mid ] 大于target ,则更新搜索范围有下标right 为mid ,因为当前nums[ mid ] 不等于 target ,那么去左区间继续寻找,而寻找的区间是左闭右开区间,所以 right 更新为mid,即在下一个查询区间不会比较 nums[ mid ]。,如果目标值存在返回下标,否则返回。原创 2023-06-28 23:50:37 · 102 阅读 · 0 评论 -
三个简单排序-选择、冒泡、插入排序
2、第一趟排序第1个和第2个一对,比较交换,随后第2个和第3个一对比较交换,这样直到倒数第2个和最后1一个,将最大的数据移动到最后一位。选择排序的原理:遍历元素找到一个最小(或最大)的元素,把它放在第一个位置,然后再在剩余元素中继续遍历找最小(或最大)的元素,把它放在第二个位置,依次下去,完成排序。3、第2趟将第2大的数据移动至倒数第2位...4、因此需要n-1趟。冒泡排序的原理: 1、比较相邻元素,如果前一个比后1个大,则就进行交换。原理:将一个未排序的元素加入到一个排序好的队列中。原创 2022-12-27 18:35:58 · 64 阅读 · 0 评论 -
java-数组
格式:数据类型 [] 变量名= new 数据类型 [] {数据1,数据2,数据3....}注意:数组遍历指的是把数组中的所有元素提取出来,取出来之后可以(打印、求和、判断。简化:数据类型 [] 变量名= {数据1,数据2, 数据3...}获取数组中的每一个元素,我们可以把获取到的元素输出在控制台。作用:索引用于访问数组中的数据使用,数组名【索引】等同于变量名。③:与数组中剩余的数据逐个比对,每次比对将最大值保存到变量中。②:取数组中第一个数据作为变量的初始值。2)索引:索引是数组中数据的编号方式。原创 2022-10-18 18:58:52 · 186 阅读 · 0 评论