
Leetcode
江湖骗子.
罕见的典型INFJ
展开
-
快速排序(Swift实现)
func quickSort(_ arr: inout [Int], _ low: Int, _ high: Int) { //需要排序的区间只包含一个数字,则不需要重排数组,直接返回。 if low < high { let pivot = partition(arr,low,high) quickSort(arr,low,privot - 1) quickSort(arr,privot + 1,high) }}privat原创 2022-05-05 21:50:50 · 1037 阅读 · 0 评论 -
寻找最长回文字符串
最长回文字符串(leetcode5)这是晴天小猪无数次打开无数次尝试失败又无数次悻悻退出的玄学题目。然而今天的美团视频面试恰恰考了这道题,晴天小猪抓耳挠腮,还顺便抽了一张纸擤鼻涕,装模做样的分析和提出三种解决方案……首先,晴天小猪根据刷字符串这一类型题的判断和直觉得出一个重大结论:得用双指针!晴天小猪想到三种双指针:第一,快慢指针,类似与龟兔赛跑,通过比对龟和兔所在元素的值来判断是否满足回文的条件。第二,头指针尾指针,一个在头,一个在尾,不停的比对不停的比对第三,中心扩散法,如果元素个数为奇原创 2022-04-18 21:26:46 · 569 阅读 · 0 评论 -
【日常练习】217.存在重复元素
给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: trueclass Solution { func containsDuplicate(_ nums: [Int]) -> Bool { v原创 2021-11-16 17:13:47 · 2109 阅读 · 0 评论 -
【平时练习】探索插入位置
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1提示:你可以假设 nums 中的所原创 2021-11-16 16:49:06 · 455 阅读 · 0 评论 -
二分法查找模板
https://leetcode-cn.com/problems/binary-search/solution/leetcode-offer-er-fen-cha-zhao-san-da-mo-0mn7/原创 2021-11-16 15:48:39 · 247 阅读 · 0 评论 -
【日常练习题】合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。** 解题思路:运用双指针以及尾插法创建数组。首先创原创 2021-11-04 21:57:24 · 263 阅读 · 0 评论 -
剑指 Offer 04:二维数组中的查找
二维数组的查找解题思路:在有序数组进行元素的查找,应该从顶点入手,本题从左下角的顶点入手,依次将target与有序数组中的元素进行比较class Solution { func findNumberIn2DArray(_ matrix: [[Int]], _ target: Int) -> Bool { var row = matrix.count - 1 var col = 0 while row >= 0 && col <= mat原创 2021-10-30 21:53:18 · 113 阅读 · 0 评论 -
剑指Offer 32:从上到下打印二叉树
剑指 Offer 32: 从上到下打印二叉树广度优先遍历class solution { func levelOrder(_ root: TreeNode?) -> [[Int]] {guard let rootVal = root else {return [[Int]]()var result = [[Int]](()//结果返回的二维数组var queue = [TreeNode]()//队列queue.append(rootVal)var curBlancecount =原创 2021-10-28 20:29:04 · 92 阅读 · 0 评论 -
【日常练习题】1.两数之和
两数之和题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。示例1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例2:输入:nums = [3,2,4], target = 6输出:[1,2]示例3:输入:nums = [3,3], target = 6输出:[原创 2021-10-24 20:02:33 · 81 阅读 · 0 评论 -
剑指 Offer 50:第一个只出现一次的字符
第一个只出现一次的字符核心解题思路:运用字母的ASCII码值来进行比对解题思路:先判断字符串为空的一种情况(比较简单)。接着开始分析怎么才能取出只出现一次的元素们,再接着考虑将在这些元素里第一个出现的return出来设定一个用来比对的字符“a",ASCII码值为97(swift里可以调用asciiValue方法来得出字母的ASCII码值)设定一个用来存储原字符串中各(字母)元素出现次数的数组,数组初始化将所有元素置为0。进行字符串内的遍历循环,用字符的ASCII码值和“a”的差值作为数组元原创 2021-10-21 20:15:14 · 182 阅读 · 0 评论 -
剑指 Offer 11:旋转数组的最小数字
旋转数组的最小数字** 解题思路:遍历查询,不停地把最小值赋值给minNum,遍历结束返回minNum.**class Solution { func minArray(_ numbers: [Int]) -> Int { var minNum : Int minNum = numbers[0] for i in numbers{ if i < minNum { minNum = i conti原创 2021-10-20 22:08:56 · 139 阅读 · 0 评论 -
剑指 Offer 53 :0~n-1中缺失的数字
0~n-1中缺失的数字** 解题思路:设定一个初始变量i,对数组中的元素进行遍历,每判断i与数组中的元素j相等,i值增加1,continue进行下一轮循环,直到遇到两数不等,输出当前i值即可**class Solution { func missingNumber(_ nums: [Int]) -> Int { var i : Int = 0 for j in nums{ if i == j{ i += 1 c原创 2021-10-20 22:00:46 · 117 阅读 · 0 评论 -
剑指 Offer 53 在排序数组中查找数字
在排序数组中查找数字** 解题思路:遍历查找,if判断并返回**class Solution { func search(_ nums: [Int], _ target: Int) -> Int { var targetnum : Int = 0 for i in nums { if i == target{ targetnum += 1 } } return targetnum }}原创 2021-10-20 21:19:43 · 112 阅读 · 0 评论 -
剑指 Offer 03: 数组中重复的数字
查找数组中重复的数字class Solution { func findRepeatNumber(_ nums: [Int]) -> Int { //先设置一个原始Int类型的变量存储重复的数字 var repeatnum:Int = 0 for i in 0..<nums.count{ for j in 0..<i{ //双重遍历判断并将重复数字赋值给repeatnum返回 if nums[i]原创 2021-10-17 21:54:17 · 76 阅读 · 0 评论 -
剑指offer24:反转链表
反转链表双指针法来解决这道题class Solution { func reverseList(_ head: ListNode?) -> ListNode? { if head == nil || head?.next == nil { return head } var node = head var reverseNode:ListNode? = nil原创 2021-10-17 21:28:14 · 117 阅读 · 0 评论 -
剑指offer06:从尾到头打印链表
从尾到头打印链表** 单链表一般是按顺序从头到尾one by one打印出来,所谓从尾到头打印链表就是:生成一个逆序的”链表“并打印出来,其实可以建立一个数组,一个一个取出原来链表中的元素插入数组中(头插法),再将数组打印出来即可实现这个功能。**代码实现如下:class Solution { func reversePrint(_ head: ListNode?) -> [Int] { var result:[Int] = [] var node = hea原创 2021-10-16 21:33:01 · 122 阅读 · 0 评论 -
剑指offer58:左旋字符串
左旋字符串首先先明白什么叫”左旋字符串“?给定一个字符串s,再给定一个小于字符串长度的整数n。先将字符串前n位(左边n位)的字符子串逆序得到新字符串s1;再将字符串第n+1位直到最后一位的字符字串逆序s2;依次将s1和s2拼接起来得到s3,再将s3逆序。例如给定一个字符串:ABCdefghi,在给定一个n值为3,左旋之后结果为defghiABC可以看出,左旋后的结果是以n位字符串为分界点,截取后的两段子串交换位置再拼接成为一个新字符串。代码实现如下:class Solution {原创 2021-10-16 20:46:04 · 143 阅读 · 0 评论 -
剑指offer30:包含min函数的栈
包含min函数的栈解题思路:运用swift内置的方法属性完成各个功能的实现class MinStack {//初始化,建立一个数组 var stack1:[Int] = [] /** initialize your data structure here. */ init() { } //入栈 func push(_ x: Int) { stack1.append(x) } //出栈 func pop() { s原创 2021-10-14 20:05:32 · 109 阅读 · 0 评论 -
剑指offer:用两个栈实现队列
如何用两个栈实现队列首先要清楚栈是先进后出,队列是先进先出的。这里用到是类似于数学的 “负负得正” 的思想。先用stack1将数据存进去,再依次取出stack1 pop出来的数据append进入stack2里,最后再把stack2里的数据pop出来,即可完成先进先出的效果。class CQueue { //定义两个数组,stack1用来存数据,stacke2用来推数据 var stack1: [Int] = [] var stack2: [Int] = [] init()原创 2021-10-13 21:52:25 · 89 阅读 · 0 评论