LeetCode 数组算法练习

数组去重

// 数组去重
    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]
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 时至今日,狗已经成为了人类生活熟悉的一部分,他们是公认的人类的好朋友。作为数量最多的家养宠物,很多人对狗狗都有一定...
    辰丶墨阅读 941评论 5 2
  • 皓月当空,银光泻落山麓田野 山谷那边传来隐约的夜鹭嘶鸣 松林细撕了清风,涛声伴莺歌 随风暗渡着紫丁香的芬芳 磬蛉在...
    误入凡尘的精灵阅读 279评论 3 7
  • 昨晚与一个女朋友聊天,女朋友最近开发了一个男票,我们聊男票的条件好不好这样的俗事。年轻人也许要嗤笑我们,爱情和柴米...
    旅友拍拍阅读 259评论 0 0
  • esp8266  nodemcu  lua  wifi  net  web 闲言碎语 nodemcu的wifi模块...
    谢mingmin阅读 11,644评论 52 15