Swift 数组算法 题+答案

1. 寻找数组的中心索引

给定一个整数类型的数组nums,请编写一个能够返回数组“中心索引”的方法。
我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。

答案

思路: 从左到右 依次 算出 每个 元素 左边的和 与 右边的和;相同的话;结束;不相同继续

func pivotIndex(_ nums: [Int]) -> Int {
    guard nums.count > 0 else {
        return -1
    }
    var index = 0
    while index < nums.count{
        var sumleft = 0
        var sumRight =  0
        for i in 0..<index{
           sumleft = sumleft + nums[i]
        }
        for j in index+1 ..< nums.count{
           sumRight = sumRight + nums[j]
        }
        if (sumleft == sumRight){
             break
        }
        index = index + 1
    }
    
    if (index == nums.count){
        index = -1
    }
    return index
}

2、至少是其他数字两倍的最大数

在一个给定的数组nums中,总是存在一个最大元素 。
查找数组中的最大元素是否至少是数组中每个其他数字的两倍。
如果是,则返回最大元素的索引,否则返回-1。

答案

思路:

  1. 将数组倒叙排列,大的在前;
  2. 比较最大的 比 第二大的 二倍还大 ;从数组中找出当前的元素索引 返回
  3. 否则返回 -1(这里如果数组只有1个元素,返回 索引0)
  func dominantIndex(_ nums: [Int]) -> Int { 
  guard nums.count > 0 && nums.count < 51 else {
        return -1
    }
    var numsResutl:[Int] = nums
    numsResutl.sort { (a, b) -> Bool in
        return a > b
    }
    if numsResutl.count > 1{
        if numsResutl[0] >= numsResutl[1]*2 {
            var index = 0
            for i in 0..<nums.count{
                if nums[i] == numsResutl[0]{
                    index = i
                    break
                }
            }
            return index
            
        }
        else{
            return -1
        }
    }else{
        return 0
    }
    }

3、 加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。

答案

思路:要注意 数组不能 换成 整数;整数 Int 类型 的范围 没有数组 换成 int 范围大
这里的思路是:
1.数组从最后一位往前 遍历
2. 最后一位 + 1 比 10 小 ; 修改最后一位的元素 ;结束
3. 如果 最后一位 +1 > = 10 ;数组 前一位 元素 加 1 继续上面操作
这里要注意的是:数组的 第 0位 元素;如果 >=10 .需要 在数组中插入高位

func plusOne(_ digits: [Int]) -> [Int] {
     var result = digits;
     for i in 0..<digits.count{
      let index = digits.count - i-1
      let addend = result[index] + 1
        if addend < 10{
            result[index] = addend
            break
        }else{
            result[index] = addend%10
            if index == 0{
               result.insert(1, at: 0)
            }
        }
    
    }
        return result
}

总结:
上述 问题 出自 https://leetcode-cn.com/explore/learn/card/array-and-string/198/introduction-to-array/772/ 答案是我写的;可能不是 最优的解决方案;但是是正确的;从这次做算法题;发现自己脑子没以前好使了;有点怀疑 做 iOS 、手机端的开发 ,是不是有点让智力退化的节奏;今后还是需要多动动脑子;才不会生锈;

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值