乐趣区

关于golang:golangleetcode中级三数之和amp矩阵置零

第一题 三数之和

题目

解题思路


代码

func threeSum(nums []int) [][]int {n := len(nums)
    sort.Ints(nums)
    ans := make([][]int, 0)
 
    // 枚举 a
    for first := 0; first < n; first++ {
        // 须要和上一次枚举的数不雷同
        if first > 0 && nums[first] == nums[first - 1] {continue}
        // c 对应的指针初始指向数组的最右端
        third := n - 1
        target := -1 * nums[first]
        // 枚举 b
        for second := first + 1; second < n; second++ {
            // 须要和上一次枚举的数不雷同
            if second > first + 1 && nums[second] == nums[second - 1] {continue}
            // 须要保障 b 的指针在 c 的指针的左侧
            for second < third && nums[second] + nums[third] > target {third--}
            // 如果指针重合,随着 b 后续的减少
            // 就不会有满足 a+b+c=0 并且 b<c 的 c 了,能够退出循环
            if second == third {break}
            if nums[second] + nums[third] == target {ans = append(ans, []int{nums[first], nums[second], nums[third]})
            }
        }
    }
    return ans
}

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/3sum/solution/san-shu-zhi-he-by-leetcode-solution/
起源:力扣(LeetCode)著作权归作者所有。商业转载请分割作者取得受权,非商业转载请注明出处。

第二题 矩阵置零

题目

解题思路


代码

func setZeroes(matrix [][]int) {n, m := len(matrix), len(matrix[0])
    col0 := false
    for _, r := range matrix {if r[0] == 0 {col0 = true}
        for j := 1; j < m; j++ {if r[j] == 0 {r[0] = 0
                matrix[0][j] = 0
            }
        }
    }
    for i := n - 1; i >= 0; i-- {
        for j := 1; j < m; j++ {if matrix[i][0] == 0 || matrix[0][j] == 0 {matrix[i][j] = 0
            }
        }
        if col0 {matrix[i][0] = 0
        }
    }
}

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/set-matrix-zeroes/solution/ju-zhen-zhi-ling-by-leetcode-solution-9ll7/
起源:力扣(LeetCode)著作权归作者所有。商业转载请分割作者取得受权,非商业转载请注明出处。
退出移动版