美文网首页
Swift 数组算法 题+答案

Swift 数组算法 题+答案

作者: 扬起帆前行 | 来源:发表于2019-02-18 18:11 被阅读0次

    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.比较最大的 比 第二大的 二倍还大 ;从数组中找出当前的元素索引 返回
    否则返回 -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.数组从最后一位往前 遍历

    1. 最后一位 + 1 比 10 小 ; 修改最后一位的元素 ;结束
    2. 如果 最后一位 +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 、手机端的开发 ,是不是有点让智力退化的节奏;今后还是需要多动动脑子;才不会生锈;

    相关文章

      网友评论

          本文标题:Swift 数组算法 题+答案

          本文链接:https://www.haomeiwen.com/subject/rtlzeqtx.html