swift
class Solution {
func findShortestSubArray(_ nums: [Int]) -> Int {
var hash: [Int:Int] = [:]
var maxCount = 0
for i in nums {
if hash[i] == nil {
hash[i] = 1
} else {
hash[i]! = hash[i]! + 1
}
if maxCount < hash[i]! {
maxCount = hash[i]!
}
}
if maxCount == 1 {
return 1
}
var dus:[Int] = []
for (key, value) in hash{
if value == maxCount {
dus.append(key)
}
}
var minLength = 50000
for maxValue in dus {
var left = 0
var right = nums.count - 1
for (index, value) in nums.enumerated() {
if value == maxValue {
left = index
break
}
}
for (index, value) in nums.enumerated().reversed() {
if value == maxValue {
right = index
break
}
}
if minLength > right - left + 1 {
minLength = right - left + 1
}
}
return minLength
}
}
12345
启发:审清题目。状态:优于80%的提交。### [167. 两数之和 II - 输入有序数组](https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/description/)问题分析:因为已按升序排序,只需前后两个指针移动即可。
swift
class Solution {
func twoSum(_ numbers: [Int], _ target: Int) -> [Int] {
var i = 0, j = numbers.count - 1
while i < j {
let value = numbers[i] + numbers[j]
if value > target {
j -= 1
} else if value < target {
i += 1
} else {
return [i + 1, j + 1]
}
}
return []
}
}
class Solution {
func maxProfit(_ prices: [Int]) -> Int {
var maxProfit = 0
for i in 0..<prices.count {
for j in (i+1)..<prices.count {
let profit = prices[j] - prices[i]
if maxProfit < profit {
maxProfit = profit
}
}
}
return maxProfit
}
}
let transform = [[-1, -1], [0, -1], [1, -1],
[-1, 0], [0, 0], [1, 0],
[-1, 1], [0, 1], [1, 1]]
func imageSmoother(_ M: [[Int]]) -> [[Int]] {
var N: [[Int]] = []
let row = M.count
let colum = M[0].count
for i in 0..<row {
var array: [Int] = []
for j in 0..<colum {
var value = 0
var count = 0
for k in 0..<9 {
let xx = i + transform[k][0]
let yy = j + transform[k][1]
if xx >= 0 && xx < row && yy >= 0 && yy < colum {
value = value + M[xx][yy]
count = count + 1
}
}
array.append(Int(value / count))
}
N.append(array)
}
return N
}
class Solution {
func transpose(_ A: [[Int]]) -> [[Int]] {
var AT: [[Int]] = []
for i in 0..<A[0].count {
var row: [Int] = []
for j in 0..<A.count {
row.append(A[j][i])
}
AT.append(row)
}
return AT
}
}
class Solution {
func getRow(_ rowIndex: Int) -> [Int] {
if rowIndex == 0 {
return [1]
}
var nums: [Int] = []
for i in 0…rowIndex {
nums.append(0)
}
nums[0] = 1
for i in 1…rowIndex {
for j in stride(from: i, to: 0, by: -1) {
nums[j] = nums[j] + nums[j - 1]
}
}
return nums
}
}
class Solution {
func matrixReshape(_ nums: [[Int]], _ r: Int, _ c: Int) -> [[Int]] {
let row: Int = nums.count
if row == 0 {
return nums
}
let colum: Int = nums[0].count
if colum == 0 {
return nums
}
// 不可以转换
if row * colum != r * c {
return nums
}
// 转换
var index: Int = 0;
var reshapeNums: [[Int]] = []
for _ in 0..<r {
var rowArray: [Int] = []
for _ in 0..<c {
rowArray.append(nums[index / colum][index % colum])
index = index + 1
}
reshapeNums.append(rowArray)
}
return reshapeNums
}
}
class Solution {
func moveZeroes(_ nums: inout [Int]) {
for i in 0..<nums.count {
if nums[i] == 0 {
var index = i
for j in (i+1)..<nums.count {
if nums[j] != 0 {
index = j
break
}
}
if index != i {
var temp = nums[i]
nums[i] = nums[index]
nums[index] = temp
}
}
}
}
}
class Solution {
func isMonotonic(_ A: [Int]) -> Bool {
var isIncrease = true
var isDecrease = true
for i in 1..<A.count {
if A[i-1] > A[i] {
isIncrease = false
break
}
}
for i in 1..<A.count {
if A[i-1] < A[i] {
isDecrease = false
break
}
}
return isIncrease || isDecrease