网站的定位与功能搜索引擎网站建设公司
- 作者: 五速梦信息网
- 时间: 2026年04月20日 08:12
当前位置: 首页 > news >正文
网站的定位与功能,搜索引擎网站建设公司,html评论页面模板,为企业做一个网站多少钱训练思维#xff0c;提高编程能力#xff0c;不为刷题而刷题 文章目录 1. 两数之和Swift版本OC版本 2. 两数相加Swift实现OC实现 3.无重复字符的最长子串SwiftOC 4.寻找两个正序数组的中位数SwiftOC 1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target#xff0c;请…训练思维提高编程能力不为刷题而刷题 文章目录 1. 两数之和Swift版本OC版本 2. 两数相加Swift实现OC实现 3.无重复字符的最长子串SwiftOC 4.寻找两个正序数组的中位数SwiftOC 1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target请你在该数组中找出和为目标值 target 的那 两个 整数并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 Swift版本 class Solution {func twoSum(_ nums: [Int], _ target: Int) - [Int] {var map Int : Intfor (i, e) in nums.enumerated() {if let u map[target - e] {return [u, i]}else {map.updateValue(i, forKey: e)}}return []} }OC版本
- (NSArray *)twoSum:(NSArray NSNumber **)nums target:(NSInteger)target {NSMutableDictionary *mutDic [NSMutableDictionary dictionary];__block NSArray *result nil;[nums enumerateObjectsUsingBlock:^(NSNumber * _Nonnull obj, NSUInteger idx, BOOL * Nonnull stop) {NSNumber *num mutDic[(target - obj.integerValue)];if (num) {result [num, (idx)];*stop YES;}else {mutDicobj;}}];return result; }测试代码 NSArray *testArr [NSArray arrayWithObjects:(2),(7),(11), (15), nil];NSArray *resu [self twoSum:testArr target:18];if (resu) {NSLog(找到结果%ld, %ld, [resu[0] integerValue], [resu[1] integerValue]);}2. 两数相加 给你两个 非空 的链表表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的并且每个节点只能存储 一位 数字。 请你将两个数相加并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外这两个数都不会以 0 开头。 Swift实现 class Solution {func addTwoNumbers( l1: ListNode?, _ l2: ListNode?) - ListNode? {var listNode1 l1;var listNode2 l2;//进位var carry: Int 0;let result: ListNode ListNode(0)var currentNode resultwhile listNode1 ! nil || listNode2 ! nil || carry 0 {let sum: Int (listNode1?.val ?? 0) (listNode2?.val ?? 0) carrycurrentNode.next ListNode(sum % 10)currentNode currentNode.next!listNode1 listNode1?.nextlistNode2 listNode2?.nextcarry sum / 10}return result.next} }OC实现
- (ListNode *)addTwoNumber:(ListNode *)l1 listNode2:(ListNode *)l2 {ListNode *result [[ListNode alloc] initWithVal:0];ListNode *currentNode result;ListNode *listNode1 l1;ListNode listNode2 l2;//进位标记NSInteger carry 0;while (listNode1 || listNode2 || carry 0) {NSInteger sum listNode1.val listNode2.val carry;currentNode.next [[ListNode alloc] initWithVal:sum%10];currentNode currentNode.next;listNode1 listNode1.next;listNode2 listNode2.next;carry sum / 10;}return result.next; }3.无重复字符的最长子串 给定一个字符串 s 请你找出其中不含有重复字符的 最长子串 的长度。 Swift /** 滑动窗口法/ func lengthOfLongestSubstring(_ s: String) - Int {let strlen s.countlet chs: [Character] Array(s)var map Character : Intvar start 0var maxLen: Int 0for i in 0..chs.count {let char chs[i]if let preIdx map[char] {start max(start, preIdx1)}map[char] i;maxLen max(maxLen, i-start1)print(start, maxLen)}return maxLen}OC /** 滑动窗口法*/- (NSInteger)lengthOfLongestSubstring:(NSString *)s {if (s.length 2) {return s.length;}NSInteger strLen s.length;NSInteger maxLen 0;NSInteger start 0;NSMutableDictionary *map [NSMutableDictionary dictionary];for (NSInteger i0; istrLen; i) {unichar c [s characterAtIndex:i];NSString *charStr [NSString stringWithCharacters:c length:1];NSNumber idxNum [map objectForKey:charStr];if (idxNum) {start MAX(start, [idxNum integerValue] 1);}mapcharStr;maxLen MAX(maxLen, i-start1);}return maxLen; }4.寻找两个正序数组的中位数 给定两个大小分别为 m 和 n 的正序从小到大数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 Swift class Solution {func findMedianSortedArrays(_ nums1: [Int], _ nums2: [Int]) - Double {let totalLen nums1.count nums2.count;if totalLen % 2 0 {let sum getKthElement(num1: nums1, num2: nums2, kth: (totalLen1)/2) getKthElement(num1: nums1, num2: nums2, kth: (totalLen2)/2)return Double(sum) / 2.0}else {let res getKthElement(num1: nums1, num2: nums2, kth: (totalLen1)/2)return Double(res)}}/ 主要思路要找到第 k (k1) 小的元素那么就取 pivot1 nums1[k/2-1] 和 pivot2 nums2[k/2-1] 进行比较* nums1 中小于等于 pivot1 的元素有 nums1[0 .. k/2-2] 共计 k/2-1 个* nums2 中小于等于 pivot2 的元素有 nums2[0 .. k/2-2] 共计 k/2-1 个* 取 pivot min(pivot1, pivot2)两个数组中小于等于 pivot 的元素共计不会超过 (k/2-1) (k/2-1) k-2 个* 这样 pivot 本身最大也只能是第 k-1 小的元素* 如果 pivot pivot1那么 nums1[0 .. k/2-1] 都不可能是第 k 小的元素。把这些元素全部 删除剩下的作为新的 nums1 数组* 如果 pivot pivot2那么 nums2[0 .. k/2-1] 都不可能是第 k 小的元素。把这些元素全部 删除剩下的作为新的 nums2 数组* 由于我们 删除 了一些元素这些元素都比第 k 小的元素要小因此需要修改 k 的值减去删除的数的个数*/func getKthElement(num1: [Int], num2:[Int], kth: Int) - Int {let m: Int num1.countlet n: Int num2.countvar k kthvar index1: Int 0, index2: Int 0while true {//处理边界情况if index1 m {return num2[index2 k - 1]}if index2 n {return num1[index1 k - 1]}if k 1 {return min(num1[index1], num2[index2])}//处理正常情况let newIdx1: Int min(index1 k/2 - 1, m-1)let newIdx2: Int min(index2 k/2 - 1, n-1)let pivot1 num1[newIdx1]let pivot2 num2[newIdx2]if pivot1 pivot2 {k - newIdx1 - index1 1index1 newIdx1 1}else {k - newIdx2 - index2 1index2 newIdx2 1}}} }OC
- (CGFloat)findMedianSortedArraysWithNums1:(NSArray *)num1 nums2: (NSArray )num2 {NSInteger totalLength num1.count num2.count;if (totalLength % 2 ! 0) {return [self getKthElement:num1 arr2:num2 kth:(totalLength1)/2];}else {CGFloat result ([self getKthElement:num1 arr2:num2 kth:(totalLength1)/2] [self getKthElement:num1 arr2:num2 kth:(totalLength2)/2])/2.0;return result;} }/ 主要思路要找到第 k (k1) 小的元素那么就取 pivot1 nums1[k/2-1] 和 pivot2 nums2[k/2-1] 进行比较* 这里的 / 表示整除* nums1 中小于等于 pivot1 的元素有 nums1[0 .. k/2-2] 共计 k/2-1 个* nums2 中小于等于 pivot2 的元素有 nums2[0 .. k/2-2] 共计 k/2-1 个* 取 pivot min(pivot1, pivot2)两个数组中小于等于 pivot 的元素共计不会超过 (k/2-1) (k/2-1) k-2 个* 这样 pivot 本身最大也只能是第 k-1 小的元素* 如果 pivot pivot1那么 nums1[0 .. k/2-1] 都不可能是第 k 小的元素。把这些元素全部 删除剩下的作为新的 nums1 数组* 如果 pivot pivot2那么 nums2[0 .. k/2-1] 都不可能是第 k 小的元素。把这些元素全部 删除剩下的作为新的 nums2 数组* 由于我们 删除 了一些元素这些元素都比第 k 小的元素要小因此需要修改 k 的值减去删除的数的个数*/
- (NSInteger)getKthElement:(NSArray NSNumber **)num1 arr2:(NSArray NSNumber **)num2 kth:(NSInteger)k {NSInteger m num1.count;NSInteger n num2.count;NSInteger index1 0, index2 0;while (true) {//处理边界情况if (index1 m) {NSNumber *num num2[index2 k - 1];return [num integerValue];}if (index2 n) {NSNumber *num num1[index1 k - 1];return [num integerValue];}if (k 1) {return MIN([num1[index1] integerValue], [num2[index2] integerValue]);}//正常情况NSInteger newIndex1 MIN(index1k/2-1, m-1);NSInteger newIndex2 MIN(index2k/2-1, n-1);NSInteger pivot1 [num1[newIndex1] integerValue];NSInteger pivot2 [num2[newIndex2] integerValue];if (pivot1 pivot2) {k - newIndex1 - index1 1;index1 newIndex1 1;}else {k - newIndex2 - index2 1;index2 newIndex2 1;}} }
- 上一篇: 网站的底部导航怎么做郑州建设网店网站
- 下一篇: 网站的动画效果代码大全wordpress列表分页
相关文章
-
网站的底部导航怎么做郑州建设网店网站
网站的底部导航怎么做郑州建设网店网站
- 技术栈
- 2026年04月20日
-
网站的登录注册怎么做专业杭州网站建设
网站的登录注册怎么做专业杭州网站建设
- 技术栈
- 2026年04月20日
-
网站的登录注册怎么做用WordPress管理app
网站的登录注册怎么做用WordPress管理app
- 技术栈
- 2026年04月20日
-
网站的动画效果代码大全wordpress列表分页
网站的动画效果代码大全wordpress列表分页
- 技术栈
- 2026年04月20日
-
网站的二级目录怎么做网站建设财务分析
网站的二级目录怎么做网站建设财务分析
- 技术栈
- 2026年04月20日
-
网站的二级页面怎么做代码大型门户网站建设定制
网站的二级页面怎么做代码大型门户网站建设定制
- 技术栈
- 2026年04月20日






