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. 数组从最后一位往前 遍历 ;
  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
}