Skip to content

jincc/iOS-Algorithm

Repository files navigation

leetcode顺序

 题号  题目链接             答案链接              难度   完成度 
1 两数之和 twoSum easy
2 两数相加 addTwoNumbers medium
3 无重复字符的最长子串 lengthOfLongestSubstring medium
5 最长回文子串 longestPalindrome medium [需要回看其他解法]
6 Z字形变换 zigzag_conversion medium
7 整数反转 reverse_integer easy
8 字符串转换整数 (atoi) string_to_integer_atoi medium
9 回文数 palindrome_number easy
11 盛最多水的容器 maxArea medium
12 整数转罗马数字 integer_to_roman medium
13 罗马数字转整数 romanToInt easy
14 最长功能前缀 longestCommonPrefix easy
15 三数之和 3sum medium
16 最接近的三数之和 3SumClosest medium
17 电话号码的字母组合 letter_combinations_of_a_phone_number medium
19 删除链表的倒数第N个节点 removeNthFromEnd medium
20 有限的括号 isValid easy
21 合并两个有序链表 mergeTwoLists easy
22 括号生成 generateParenthesis medium
24 两两交换链表中的节点 swapPairs medium
26 删除排序数组中重复项 removeDuplicates easy
27 移除元素 removeElement easy
28 实现 strStr() strStr easy
31 下一个排列 next_permutation medium
33 搜索旋转排序数组 searchInRotatedSortedArray medium
34 在排序数组中查找元素的第一个和最后一个位置 searchRange medium
35 搜索插入位置 searchInsert easy
36 有效的数独 isValidSudoku medium
39 组合总和 combinationSum medium
46 全排列 permutations medium
50 Pow(x, n) powx medium
53 最大子序和 maxSubArray easy
56 合并区间 merge_intervals medium
58 最后一个单词的长度 lengthOfLastWord easy
66 加一 plusOne easy
67 二进制求和 addBinary easy
69 x 的平方根 mySqrt easy
70 爬楼梯 climbStairs easy
74 搜索二维矩阵 search_a_2d_matrix medium
75 颜色分类 sort_colors medium
81 搜索旋转排序数组II searchInRotatedSortedArrayII medium
83 删除排序链表中的重复元素 deleteDuplicates easy
88 合并两个有序数组 merge easy
100 相同的树 isSameTree easy
153 寻找旋转排序数组中的最小值 find_minimum_in_rotated_sorted_array medium
687 最长同值路径 longestUnivaluePath easy





下面按照具体的分类来刷题,总结每个思想的精髓。

算法思想

二分查找 🚶🚶🚶🚶






数据结构

数组有两个关键词:

  • 线性表结构, 就是说元素之间只有前后关系
  • 连续的内存空间,存储的是具有相同类型的数据

第二个特征决定了数组“随机访问”的能力,因为我们完全可以通过地址计算出下标对应的位置。比如:

a[i]_add = base_add + i * type_size

有利就有弊,也正是由于内存连续,所以数组的插入和删除是非常低效的,因为为了保持内存的连续,就意味着每次插入/删除都要伴随着大量的移动操作,平均负责度为o(n).

容器类在数组的基础上,封装了插入删除等操作,同时支持了动态扩容. 需要注意的是,如果实现知道数组的大小,最好提前指定容器大小,这样可以省掉多次的内存申请和数据搬移。

大多情况下的解题思路:

  • 双指针
  • DP
  • 二分查找