![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法和数据结构
文章平均质量分 71
学开发的阿强
这个作者很懒,什么都没留下…
展开
-
剑指offer(九):数学
剑指offer(九):数学题目一:剪绳子数学推导得到:① 当所有绳段长度相等时,乘积最大。② 最优的绳段长度为 33public int cuttingRope(int n) { if(n<=3)return n-1; int a = n/3,b=n%3; if (b==0)return (int) Math.pow(3,a); if (b==1)return (int) Math.pow(3,a-1)*4; ret原创 2021-12-09 22:10:08 · 461 阅读 · 0 评论 -
剑指offer(八):位运算
剑指offer(八):位运算题目一:二进制中 1 的个数方法一:逐位进行操作public class Solution { public int hammingWeight(int n) { int res = 0; while(n != 0) { res += n & 1; //按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 n >>原创 2021-12-08 16:18:35 · 135 阅读 · 0 评论 -
剑指offer(七):双指针
剑指offer(七):双指针题目一:删除链表的节点class Solution { public ListNode deleteNode(ListNode head, int val) { if(head.val == val) return head.next; ListNode pre = head, cur = head.next; while(cur != null && cur.val != val) {原创 2021-12-05 19:30:35 · 253 阅读 · 0 评论 -
剑指offer(六):查找算法
剑指offer(五):查找算法题目一:数组中重复的数字方法一:哈希表 / Set,自己也是这么出来的,但是没有答案简便class Solution { public int findRepeatNumber(int[] nums) { Set<Integer> dic = new HashSet<>(); for(int num : nums) { if(dic.contains(num)) return num;原创 2021-12-03 20:08:54 · 589 阅读 · 0 评论 -
剑指offer(五):排序算法
剑指offer(五):排序算法排序算法用作实现列表的排序,列表元素可以是整数,也可以是浮点数、字符串等其他数据类型!常用算法需要在排序算法的基础:二分查找: 根据数组已排序的特性,才能每轮确定排除两部分中的哪一部分;双指针: 例如合并两个排序链表,根据已排序特性,才能通过双指针移动在线性时间内将其合并为一个排序链表。比较:题目一:最小的 k 个数巧妙借用快速排序的思想class Solution { public int[] getLeastNumbers(int[] a原创 2021-12-01 22:05:40 · 548 阅读 · 0 评论 -
剑指offer:分治算法
剑指offer(四):分治算法我是菜逼!!!!!!题目一:重建二叉树public class p7 { int [] preorder; //使用哈希表来标记索引,得到根节点在中序遍历列表中的位置 HashMap<Integer,Integer> dic = new HashMap<>(); public TreeNode buildTree(int[] preorder, int[] inorder) { this.preord原创 2021-11-30 21:14:25 · 277 阅读 · 0 评论 -
剑指offer:搜索与回溯算法
剑指offer(三):搜索与回溯算法题目一:矩阵中的路径解题思路:本问题是典型的矩阵搜索问题,可使用 深度优先搜索(DFS)+ 剪枝 解决。深度优先搜索: 可以理解为暴力法遍历矩阵中所有字符串可能性。DFS 通过递归,先朝一个方向搜到底,再回溯至上个节点,沿另一个方向搜索,以此类推。剪枝: 在搜索中,遇到这条路不可能和目标字符串匹配成功 的情况(例如:此矩阵元素和目标字符不同、此元素已被访问),则应立即返回,称之为可行性剪枝DFS 解析:class Solution { pub原创 2021-11-26 22:11:06 · 350 阅读 · 0 评论 -
剑指offer(二):动态规划
剑指offer(二):补充知识:动态规划解题框架若确定给定问题具有重叠子问题和最优子结构,那么就可以使用动态规划求解。总体上看,求解可分为四步:状态定义: 构建问题最优解模型,包括问题最优解的定义、有哪些计算解的自变量;初始状态: 确定基础子问题的解(即已知解),原问题和子问题的解都是以基础子问题的解为起始点,在迭代计算中得到的;转移方程: 确定原问题的解与子问题的解之间的关系是什么,以及使用何种选择规则从子问题最优解组合中选出原问题最优解;返回值: 确定应返回的问题的解是什么,即动态规划在原创 2021-11-17 22:30:41 · 371 阅读 · 1 评论 -
剑指offer(一):数据结构
剑指offer刷题笔记(一)数据结构数组数组【Array】是将相同类型的元素存储于连续内存空间的数据结构,其长度不可变。可变数组【ArrayList】是经常使用的数据结构,其基于数组和扩容机制实现,相比普通数组更加灵活。常用操作有:访问元素、添加元素、删除元素。链表链表以节点为单位,每个元素都是一个独立对象,在内存空间的存储是非连续的。链表的节点对象具有两个成员变量:「值 val」,「后继节点引用 next」栈栈是一种具有 「先入后出」 特点的抽象数据结构,可使用数组或原创 2021-11-10 19:47:53 · 293 阅读 · 0 评论 -
数据结构与算法:排序
排序一、简单排序 在我们的程序中,排序是非常常见的一种需求,提供一些数据元素,把这些数据元素按照一定的规则进行排序。比如查询一些订单按照订单的日期进行排序;再比如查询一些商品,按照商品的价格进行排序等等。所以,接下来我们要学习一些常见的排序算法。 在java的开发工具包jdk中,已经给我们提供了很多数据结构与算法的实现,比如List , Set , Map , Math等等,都是以API的方式提供,这种方式的好处在于一次编写,多处使用。我们借鉴jdk的方式,也把算法封装原创 2021-09-22 20:10:08 · 280 阅读 · 0 评论 -
算法初始:时间复杂度和空间复杂度
数据结构和算法1、数据结构传统上,把数据结构分为逻辑结构和物理结构两大类1.1、逻辑结构分类集合结构:集合结构中数据元素除了属于同一个集合外,他们之间没有任何其他的关系线性结构:线性结构中的数据元素之间存在一对一的关系树形结构:树形结构中的数据元素之间存在一对多的层次关系图形结构:图形结构的数据元素是多对多的关系1.2、物理结构分类 逻辑结构在计算机中真正的表示方式(又称为映像)称为物理结构,也可以叫做存储结构。常见的物理结构有顺序存储结构、链式存储结构原创 2021-09-14 15:56:13 · 296 阅读 · 0 评论