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