美文网首页
剑指 Offer II 007. 数组中和为 0 的三个数

剑指 Offer II 007. 数组中和为 0 的三个数

作者: 邦_ | 来源:发表于2022-04-08 10:21 被阅读0次

    排序后,固定一个数 ,就变成了查找两数之和等于固定的数的反数
    注意找到之后 要把左指针往右移动 右指针往左移动 要不会陷入死循环
    但是会发现有重复的。。 如果相等的时候 双指针移动之后的元素是一样的
    对于左指针的话 就是当前的和往后挪动一位的相等
    对于右指针的话 就是当前的和往前挪动一位的相等
    但是。。 还是会有重复的。。 因为前一个和后一个数字一样 有可能找出来的结果也是一样
    所以 当前一个和后一个数字值相同的时候 跳过

    注意这块是 -1 和前边的比, 不能和后边的比 这样会造成没有统计和计算的被直接跳过

    
    while left < right && tempNums[left] == tempNums[left - 1]{
                            left += 1
    
                        }
                        while left < right && tempNums[right] == tempNums[right + 1]{
                            right -= 1
                        }
    
    
    
    
    
    func threeSum(_ nums: [Int]) -> [[Int]] {
            
            if nums.isEmpty || nums.count < 3{
                return []
            }
            let tempNums = nums.sorted()
            var array :[[Int]] = Array()
            for i in 0..<tempNums.count - 1 {
                if  i > 0 && tempNums[i] == tempNums[i - 1] {
                    continue
                }
                
                var left  = i + 1
                var right  = tempNums.count - 1
                while left < right {
                    
                    if tempNums[left] + tempNums[right] == -tempNums[i] {
                        array.append([tempNums[i],tempNums[left],tempNums[right]])
                        left += 1
                        right -= 1
    
                       while left < right && tempNums[left] == tempNums[left - 1]{
                            left += 1
    
                        }
                        while left < right && tempNums[right] == tempNums[right + 1]{
                            right -= 1
                        }
                        
    
                    }
                    else if tempNums[left] + tempNums[right] > -tempNums[i] {
                        
                       right -= 1
    
                    }
                    else {
                        
                        left += 1
                        
                    }
                    
                }
           
                
            }
           
            return array
    
    
            
        }
    
    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:剑指 Offer II 007. 数组中和为 0 的三个数

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