-
1、算法一:给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
a、例如:[2,5,3,7,4],k=2;结果为:[7,4,1,5,3]///inout在swift中表示传地址进入 func rotate( arr:inout [Int],k:Int){ for _ in 0..<k{ let lastV = arr[arr.count-1] for index in 0..<arr.count-1{ let last = arr.count-1-index arr[last] = arr[last-1] } arr[0] = lastV } print("rotate:\(arr)") } -
2、算法二:
==给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
==请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
==注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。
==为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。[2,6,8,9,14,67,0,0,0,0], num2: [12,23,34,45]///思路:直接num2合并到num2,并进行相应判断移动 func merge(num1:[Int],m:Int,num2:[Int],n:Int){ var result = num1 var i = n-1 var j = m-1 var offset = n+m-1 while(i >= 0){ let r2 = num2[i] let r1 = num1[j] if r2 > r1{ result[offset] = r2 i -= 1 }else{ result[offset] = r1 j -= 1 } offset -= 1 } print("merge: origin:\(num1) result:\(result)") } -
3、算法三:设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
==规律分析:n=1,f(1)=1;n=2,f(2)=2;n=3,f(3)=3;n=4,f(4)=5;n=5,f(5)=8;...;n=n,f(n-2)+f(n-1)
==使用递归的方式实现func climStairs(n:Int) -> Int{ if n <= 2{ return n } return climStairs(n: n-1) + climStairs(n: n-2) } -
4、算法四:数字加一:给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
func plusOne(array:[Int]){ var arr = array let count = arr.count let one = 1 for i in 0..<count{ let index = count - i - 1 let value = arr[index] if value < 9{ arr[index] = arr[index] + one break }else{ arr[index] = 0 if index <= 0{ arr.insert(1, at: 0) } } } print("plus one:\(arr)") } -
5、算法五:树的中序遍历
/// MARK:初始化二叉树 func setupTree(){ let node1 = Node().value(1) let node2 = Node().value(2) let node3 = Node().value(3) let node4 = Node().value(4) let node5 = Node().value(5) let node6 = Node().value(6) node1?.left(node2) node1?.right(node3) node2?.left(node4) node2?.right(node5) node3?.right(node6) intermediateSequence(node: node1) } /// MARK:中序遍历 func intermediateSequence(node:Node?){ if node == nil{return} intermediateSequence(node: node?.tleft) print("--\(node!.tvalue)--") intermediateSequence(node: node?.tright) } class Node : NSObject{ var tleft : Node? = nil var tright : Node? = nil var tvalue : Int = 0 @discardableResult func left(_ left:Node?) -> Node?{ self.tleft = left return self } @discardableResult func right(_ right:Node?) -> Node?{ self.tright = right return self } @discardableResult func value(_ value:Int) -> Node?{ self.tvalue = value return self } }转载请标明出处
高频面试算法:leetCode算法(swift实现一)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- Attention 秋招接近尾声,我总结了 牛客、WanAndroid 上,有关笔试面经的帖子中出现的算法题,结合...
- JavaScript笔试部分 实现防抖函数(debounce) 防抖函数原理:在事件被触发n秒后再执行回调,如果在...
- 前言 本文讲解 56 道 JavaScript 和 ES6+ 面试题的内容。 复习前端面试的知识,是为了巩固前端的...