美文网首页
LeetCode 数组算法练习

LeetCode 数组算法练习

作者: 莫寂岚 | 来源:发表于2018-08-16 09:28 被阅读14次

数组去重

// 数组去重
    func rotate(_ nums: inout [Int], _ k: Int) {
        guard k != 0 else {
            return
        }
        let step = k%nums.count
        nums.reverse()
        for i in 0..<step {
            if i >= step/2 {
                break
            }
            nums.swapAt(i, step-1-i)
        }
        for j in step ..< nums.count {
            if j - step >= (nums.count - step)/2 {
                break
            }
            nums.swapAt(j, nums.count-1 - (j-step))
        }
    }

只出现一次

// 只出现一次
    func singleNumber(_ nums: [Int]) -> Int {
        var i = 0
        for index in 0..<nums.count {
            i ^= nums[index]
        }
        return i
    }

交集

// 交集
    func intersect(_ nums1: [Int], _ nums2: [Int]) -> [Int] {
        
        let set1: Set<Int> = Set(nums1)
        let set2: Set<Int> = Set(nums2)
        let setR = set1.intersection(set2)
        let arr = Array(setR)
        return arr
    }

加一

// 加一
    func plusOne(_ digits: [Int]) -> [Int] {
        var digits = digits
        var carray = 1
        for i in (0..<digits.count).reversed() {
            let sum = digits[i] + carray
            digits[i] = sum%10
            carray = sum/10
            if carray == 0 {return digits}
        }
        digits.insert(1, at: 0)
        return digits
    }

移动零

// 移动0 (方法一)
    func moveZeroes(_ nums: inout [Int]) {
        var step = nums.count - 1
        for i in (0...step).reversed() {
            if nums[i] == 0 && i != step {
                let temp = nums[i]
                for index in i...step {
                    if index == step {
                        break
                    }
                    nums[index] = nums[index + 1]
                }
                nums[step] = temp
                step -= 1
            }
        }
    }

// 移动0 (方法二)
    func moveZeroes(_ nums: inout [Int]) {
        var pointer = 0
        var numsOf_0 = 0
        for index in 0..<nums.count {
            if nums[index] != 0 {
                (nums[index], nums[pointer]) = (nums[pointer], nums[index])
                pointer += 1
            } else {
                numsOf_0 += 1
            }
            if index == nums.count - numsOf_0 - 1 {
                break
            }
        }
    }

两数之和

func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
         var dic: [Int: Int] = [:]
        for i in 0..<nums.count {
            if let j = dic[target-nums[i]] {
                return [i, j]
            }
            dic[nums[i]] = i
        }
        return [0]
    }

相关文章

  • LeetCode 数组算法练习

    数组去重 只出现一次 交集 加一 移动零 两数之和

  • 日常算法练习(二) Leetcode

    前言 这次算法练习是数组类型简单练习,以后LeetCode的练习会根据不同tags进行展开,先easy再到medi...

  • LeetCode基础算法-数组

    LeetCode基础算法-数组 算法 LeetCode 数组相关 1. 从排序数组中删除重复项 描述:给定一个排序...

  • First Missing Positive

    标签: C++ 算法 LeetCode 数组 每日算法——leetcode系列 问题 First Missing...

  • Next Permutation

    标签: C++ 算法 LeetCode 数组 每日算法——leetcode系列 问题 Next Permuta...

  • Trapping Rain Water

    标签: C++ 算法 LeetCode 数组 每日算法——leetcode系列 问题 Trapping Rain...

  • Combination Sum

    标签: C++ 算法 LeetCode 数组 DFS 每日算法——leetcode系列 问题 Combinat...

  • Search Insert Position

    标签: C++ 算法 LeetCode 数组 二分查找 每日算法——leetcode系列 问题 SeSearch...

  • Search for a Range

    标签: C++ 算法 LeetCode 数组 二分查找 每日算法——leetcode系列 问题 Search f...

  • Search in Rotated Sorted Array

    标签: C++ 算法 LeetCode 数组 困难 二分法 每日算法——leetcode系列 问题 Search...

网友评论

      本文标题:LeetCode 数组算法练习

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