学好数据结构与算法其实一点也不难

2023-05-26 0 847

曾没人说,排序机程序那个小东西,假如你不去学,可能将这辈子都体会不出它的好。但除非掌控,就会被它的强悍杀伤力所赞叹。

它是下层合作开发的重要组成部分,确保下层控制系统的灵活性和INS13ZD;……

总体而言,从实用主义视角,它是小厂必修,你无可避免,从长远规划视角,它将下定决心你的控制技术下限。

除非夺下了排序机程序与演算法,就有如站在勇士的手臂上,在合作开发武林占据先机。因此说难也得要学

一. 贝唐演算法

1.1 甚么是演算法?

表述

在微积分和排序机科学应用领域,演算法是一连串非常有限的细致命令,一般来说用作化解两类某一难题或继续执行排序

In mathematics and computer science, an algorithm(/ˈælɡərɪðəm/) is a finite sequence of rigorous instructions, typically used to solve a class of specific problems or to perform a computation.

Introduction to Algorithm

不正式宣布的说,演算法是任何人表述卓越的排序操作过程:转交许多值做为输入,在非常有限的天数内,造成许多值做为输出。

Informally, an algorithm is any well-defined computational procedure that takes some value, or set of values, as input and produces some value, or set of values, as output in a finite amount of time.

1.2 甚么是排序机程序?

表述

在排序机科学应用领域,排序机程序是一种数据组织、管理和存储格式,一般来说被选择用来高效访问数据

In computer science, a data structureis a data organization, management, and storage format that is usually chosen for efficient access to data

Introduction to Algorithm

排序机程序是一种存储和组织数据的方式,旨在便于访问和修改

A data structure is a way to store and organize data in order to facilitate access and modifications

接下来我们通过对一个非常著名的二分查找演算法的讲解来认识一下演算法

1.3 二分查找

二分查找演算法也称折半查找,是一种非常高效的工作于有序数组的查找演算法。不妨用它做为入门。

二分查找基础版

需求:在有序数组 AA 内,查找值 targettarget

假如找到返回索引假如找不出返回 −1

演算法描述

前提

给定一个内含 nn 个元素的有序数组 AA,满足 A_{0}\leq A_{1}\leq A_{2}\leq \cdots \leq A_{n-1}A0≤A1≤A2​≤⋯≤An−1​,一个待查值 targettarget

1

设置 i=0i=0,j=n-1j=n−1

2

假如 i \gt ji>j,结束查找,没找到

3

设置 m = floor(\frac {i+j}{2})m=floor(2i+j​) ,mm 为中间索引,floorfloor 是向下取整(\leq \frac {i+j}{2}≤2i+j​ 的最小整数)

4

假如 target < A_{m}target<Am​ 设置 j = m – 1j=m−1,跳到第2步

5

假如 A_{m} < targetAm​<target 设置 i = m + 1i=m+1,跳到第2步

6

假如 A_{m} = targetAm​=target,结束查找,找到了

java 实现

学好数据结构与算法其实一点也不难
i,j 对应着搜索区间 [0,a.length-1][0,a.length−1](注意是闭合的区间),i<=j 意味着搜索区间内还有未比较的元素,i,j 指向的元素也可能将是比较的目标思考:假如不加 i==j行不行?回答:不行,因为这意味着 i,j 指向的元素会漏过比较m 对应着中间位置,中间位置左边和右边的元素可能将不相等(差一个),不会影响结果假如某次未找到,那么缩小后的区间内不包含 m

上面应该看懂了吧,入门排序机程序与演算法下面那个课程比较丰富,最近新扒拉来的。刚刷了20来小节,极易吸收,一起卷吧,涉及排序机程序与演算法的各个方面,包括数组、链表、递归、队列、栈、堆、二叉树、查找演算法、排序演算法、回溯、贪心、分治、动态规划等等。

黑马程序员2023新版Java排序机程序与演算法视频教程

除了学习刷题也是很重要的,力扣经典演算法题

1. Two Sum (两数之和), Easy, 11757 likes2. Add Two Numbers (两数相加), Medium, 6524 likes3. Longest Substring Without Repeating Characters (无重复字符的最长子串), Medium, 5845 likes4. Median of Two Sorted Arrays (寻找两个正序数组的中位数), Hard, 4303 likes5. Longest Palindromic Substring (最长回文子串), Medium, 3896 likes15. 3Sum (三数之和), Medium, 3582 likes53. Maximum Subarray (最大子序和), Easy, 3533 likes7. Reverse Integer (整数反转), Easy, 2970 likes11. Container With Most Water (盛最多水的容器), Medium, 2659 likes42. Trapping Rain Water (接雨水), Hard, 2552 likes20. Valid Parentheses (有效的括号), Easy, 2544 likes ✔️10. Regular Expression Matching (正则表达式匹配), Hard, 2273 likes26. Remove Duplicates from Sorted Array (删除有序数组中的重复项), Easy, 2146 likes ✔️136. Single Number (只出现一次的数字), Easy, 1958 likes22. Generate Parentheses (括号生成), Medium, 1946 likes206. Reverse Linked List (反转链表), Easy, 1886 likes ✔️21. Merge Two Sorted Lists (合并两个有序链表), Easy, 1832 likes ✔️70. Climbing Stairs (爬楼梯), Easy, 1791 likes ✔️300. Longest Increasing Subsequence (最长递增子序列), Medium, 1773 likes121. Best Time to Buy and Sell Stock (买卖股票的最佳时机), Easy, 1766 likes72. Edit Distance (编辑距离), Hard, 1743 likes14. Longest Common Prefix (最长公共前缀), Easy, 1707 likes198. House Robber (打家劫舍), Medium, 1585 likes9. Palindrome Number (回文数), Easy, 1568 likes146. LRU Cache (LRU 缓存机制), Medium, 1544 likes19. Remove Nth Node From End of List (删除链表的倒数第 N 个结点), Medium, 1494 likes ✔️33. Search in Rotated Sorted Array (搜索旋转排序数组), Medium, 1493 likes46. Permutations (全排列), Medium, 1484 likes101. Symmetric Tree (对称二叉树), Easy, 1483 likes84. Largest Rectangle in Histogram (柱状图中最大的矩形), Hard, 1472 likes39. Combination Sum (组合总和), Medium, 1466 likes13. Roman to Integer (罗马数字转整数), Easy, 1436 likes23. Merge k Sorted Lists (合并K个升序链表), Hard, 1436 likes ✔️17. Letter Combinations of a Phone Number (电话号码的字母组合), Medium, 1436 likes322. Coin Change (零钱兑换), Medium, 1414 likes32. Longest Valid Parentheses (最长有效括号), Hard, 1400 likes287. Find the Duplicate Number (寻找重复数), Medium, 1325 likes122. Best Time to Buy and Sell Stock II (买卖股票的最佳时机 II), Easy, 1306 likes160. Intersection of Two Linked Lists (相交链表), Easy, 1302 likes ✔️55. Jump Game (跳跃游戏), Medium, 1292 likes76. Minimum Window Substring (最小覆盖子串), Hard, 1280 likes200. Number of Islands (岛屿数量), Medium, 1270 likes78. Subsets (子集), Medium, 1269 likes31. Next Permutation (下一个排列), Medium, 1260 likes96. Unique Binary Search Trees (不同的二叉搜索树), Medium, 1257 likes148. Sort List (排序链表), Medium, 1248 likes236. Lowest Common Ancestor of a Binary Tree (二叉树的最近公共祖先), Medium, 1238 likes25. Reverse Nodes in k-Group (K 个一组翻转链表), Hard, 1230 likes6. ZigZag Conversion (Z 字形变换), Medium, 1226 likes152. Maximum Product Subarray (乘积最大子数组), Medium, 1223 likes215. Kth Largest Element in an Array (数组中的第K个最大元素), Medium, 1211 likes8. String to Integer (atoi) (字符串转换整数 (atoi)), Medium, 1168 likes41. First Missing Positive (缺失的第一个正数), Hard, 1163 likes283. Move Zeroes (移动零), Easy, 1162 likes141. Linked List Cycle (环形链表), Easy, 1161 likes ✔️98. Validate Binary Search Tree (验证二叉搜索树), Medium, 1156 likes124. Binary Tree Maximum Path Sum (二叉树中的最大路径和), Hard, 1152 likes105. Construct Binary Tree from Preorder and Inorder Traversal (从前序与中序遍历序列构造二叉树), Medium, 1149 likes34. Find First and Last Position of Element in Sorted Array (在排序数组中查找元素的第一个和最后一个位置), Medium, 1137 likes ✔️239. Sliding Window Maximum (滑动窗口最大值), Hard, 1114 likes142. Linked List Cycle II (环形链表 II), Medium, 1097 likes ✔️139. Word Break (单词拆分), Medium, 1097 likes45. Jump Game II (跳跃游戏 II), Medium, 1094 likes169. Majority Element (多数元素), Easy, 1089 likes234. Palindrome Linked List (回文链表), Easy, 1072 likes ✔️62. Unique Paths (不同路径), Medium, 1072 likes189. Rotate Array (旋转数组), Medium, 1057 likes94. Binary Tree Inorder Traversal (二叉树的中序遍历), Easy, 1052 likes ✔️56. Merge Intervals (合并区间), Medium, 1051 likes88. Merge Sorted Array (合并两个有序数组), Easy, 1041 likes ✔️560. Subarray Sum Equals K (和为K的子数组), Medium, 1036 likes279. Perfect Squares (完全平方数), Medium, 1035 likes35. Search Insert Position (搜索插入位置), Easy, 1005 likes24. Swap Nodes in Pairs (两两交换链表中的节点), Medium, 996 likes85. Maximal Rectangle (最大矩形), Hard, 983 likes28. Implement strStr() (实现 strStr()), Easy, 982 likes92. Reverse Linked List II (反转链表 II), Medium, 980 likes155. Min Stack (最小栈), Easy, 979 likes79. Word Search (单词搜索), Medium, 979 likes27. Remove Element (移除元素), Easy, 967 likes51. N-Queens (N 皇后), Hard, 965 likes75. Sort Colors (颜色分类), Medium, 961 likes102. Binary Tree Level Order Traversal (二叉树的层序遍历), Medium, 960 likes ✔️48. Rotate Image (旋转图像), Medium, 960 likes95. Unique Binary Search Trees II (不同的二叉搜索树 II), Medium, 955 likes64. Minimum Path Sum (最小路径和), Medium, 954 likes406. Queue Reconstruction by Height (根据身高重建队列), Medium, 947 likes226. Invert Binary Tree (翻转二叉树), Easy, 941 likes437. Path Sum III (路径总和 III), Medium, 937 likes104. Maximum Depth of Binary Tree (二叉树的最大深度), Easy, 937 likes237. Delete Node in a Linked List (删除链表中的节点), Easy, 936 likes ✔️337. House Robber III (打家劫舍 III), Medium, 929 likes18. 4Sum (四数之和), Medium, 918 likes91. Decode Ways (解码方法), Medium, 904 likes207. Course Schedule (课程表), Medium, 897 likes37. Sudoku Solver (解数独), Hard, 897 likes175. Combine Two Tables (组合两个表), Easy, 891 likes416. Partition Equal Subset Sum (分割等和子集), Medium, 886 likes238. Product of Array Except Self (除自身以外数组的乘积), Medium, 885 likes114. Flatten Binary Tree to Linked List (二叉树展开为链表), Medium, 877 likes

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务