算法
文章平均质量分 60
Kris_u
Life is short, life is wonderful。
展开
-
力扣93:复原IP地址(golang)-字节跳动算法题
93. 复原 IP 地址 - 力扣(LeetCode) (leetcode-cn.com)有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 I原创 2022-02-28 17:30:12 · 2154 阅读 · 0 评论 -
二叉树类高频算法题golang实现
1、二叉树的先序遍历、中序遍历、后序遍历先序遍历:根节点-->左子树--->右子树type TreeNode struct{ Value int Left,Right *TreeNode}func (node *TreeNode) traverse(){ if node ==nil{ return } fmt.Print(node.Value+" ") node.Left.traverse() node.Right.traverse()}中序遍原创 2022-02-26 12:07:21 · 361 阅读 · 0 评论 -
链表类算法题
1、反转链表leetcode 206:// ListNode Definition for singly-linked list.type ListNode struct { Val int Next *ListNode}func reverseList(head *ListNode) *ListNode { if head == nil || head.Next == nil { return head } var prev *Li原创 2022-02-19 13:45:53 · 637 阅读 · 0 评论 -
招商银行开发岗算法题golang实现
1、给出一个非空的字符串,判断这个字符串是否是由它的一个子串进行多次首尾拼接构成的。例如,"abcabcabc"满足条件,因为它是由"abc"首尾拼接而成的,而"abcab"则不满足条件。思路:分为若干份,从2等分开始, 子串的最大长度为字符串的1/2,把相同的子串用空字符串替换,若替换后的字符串为空,则该字符串满足:是由子串首位拼接而成的条件。func subString(s string) (flag bool) { flag = true for i := 1; i < len(s原创 2022-02-17 11:17:26 · 3229 阅读 · 0 评论 -
面试题 01.07. 旋转矩阵:翻转矩阵法golang实现
力扣原题:面试题 01.07. 旋转矩阵给你一幅由N × N矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?根据官方解法三实现:解题思路:1、首先按找对角线翻转,即求矩阵的转置。2、继续对矩阵的转置进行水平翻转根据中心轴。复杂度分析:时间复杂度,空间复杂度//旋转矩阵90度func rotateMatrix(nums [][]int) [][]int { //按照对角线翻转,即求矩阵的转置。...原创 2021-01-26 19:18:58 · 539 阅读 · 0 评论 -
桶排序算法:topK元素golang实现
首先介绍一下桶思想: 在现实世界中,大部分的数据分布是均匀的,或者在设计的时候让它可以均匀分布,或者说可以转换为均匀的分布。数据均匀分布了,桶排序的效率就能发挥出来。(分库分表)误区: 1.如果数据分布不均匀,大量的数据集中在少数桶里,桶排序就没效果了。 2、桶排序要时间就省不了空间,要空间就省不了时间。结论是桶排序意义不大。桶排序或所谓的箱排序桶排序(Bucket sort)的原理:假如输入的数据服从均匀分布,将数据分到有限数量的桶里,...原创 2021-01-26 16:28:32 · 948 阅读 · 0 评论 -
240. 搜索二维矩阵 II:双指针法 golang实现
LeetCode算法题:240. 搜索二维矩阵 II编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。思路:因为矩阵的行和列是排序的(分别从左到右和从上到下),所以在查看任何特定值时,我们可以修剪O(m)O(m)或O(n)O(n)元素。算法:首先,我们初始化一个指向矩阵左下角的 (row,col)指针。然后,直到找到目标并返回 true(或者指针指向矩阵维度之外的 (r...原创 2021-01-06 18:42:26 · 258 阅读 · 0 评论 -
LeetCode求众数:摩尔投票法golang实现
给定一个大小为n的整数数组,找出其中所有出现超过⌊ n/3 ⌋次的元素。进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。LeetCode原题链接:https://leetcode-cn.com/problems/majority-element-ii/solution/liang-fu-dong-hua-yan-shi-mo-er-tou-piao-fa-zui-zh/摩尔投票法,解决的问题是如何在任意多的候选人中,选出票数超过一半的那个人。注意,是超出...原创 2021-01-06 12:02:52 · 166 阅读 · 0 评论 -
golang:删除数组中的重复元素,返回删除元素后数组长度,空间复杂度O(1)。
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。要求空间复杂度O(1)。func delRepeatElem(nums []int) int { fmt.Println(nums, &nums[0]) for i := 0; i < len(nums)-1; i++ { if nums[i]^nums[i+1] == 0 { //重复元素执行异或操作等于0. nums = append(nums[:i], nums[原创 2020-12-31 17:08:06 · 1361 阅读 · 4 评论 -
1046最后一块石头的重量golang:LeetCode
有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为x 和y,且x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎;如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。示例:输入:[2,7,4,1,8,1]输出:1解释:先选出 7 和 8,得到 1,所...原创 2020-12-30 18:02:59 · 94 阅读 · 0 评论 -
三数之和golang:LeetCode
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]//先排序,再使用双指针遍历数组,找到三个数之和为0的数func treeSum(nums []int) [][]int ...原创 2020-12-30 17:58:18 · 483 阅读 · 0 评论 -
排序算法:golang实现
1、二分查找: 输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回空。二分查找时间复杂度:对于包含n个元素的列表,用二分查找最多需要二分查找算法golang实现://二分查找算法func binary_search(list []int, item int) int { low := 0 high := len(list) - 1 //low,high用于跟踪要在其中查找的部分 for low <= high { ...原创 2020-12-21 11:37:23 · 520 阅读 · 0 评论 -
LeetCode算法题目:股票交易最大利润
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。限制:0 <= ...原创 2020-12-17 19:30:48 · 1826 阅读 · 0 评论 -
LeetCode:go算法题目实现
//两个栈实现一个队列type Stack struct { element []int}func NewStack(col int) *Stack { return &Stack{ element: make([]int, 0, col), }}func (s Stack) len() int { return len(s.element)}func (s *Stack) Push(elem int) { s.element = append(s.element,.原创 2020-12-19 15:11:57 · 534 阅读 · 0 评论 -
leetcode :最长回文子串 golang中心展开法
5、给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"func main() { fmt.Println(longestPalindrome("baabd")) fmt.Println(longestPalindrome("babad")) fmt.Println(longestPalindrome("cb.原创 2020-11-29 14:53:19 · 214 阅读 · 0 评论 -
leetcode:算法题golang
1、在一个字符串里面找出最长的不重复子串2、数组中的重复数字第一种解法:先排序再扫描。从排好序的数组进行遍历,记录当前位置与其之前位置的数进行比较,若相等则输出该数。时间复杂度:O(nlogn);空间复杂度O(1)第二种解法:对数组进行遍历,每次判断哈希表中是否含有该元素,若有,输出此元素。若最后哈希表中的元素数量与数组中的相同,表面无重复数据。 时间复杂度:O(n);空间复杂度O(n)3、给定一个数组代表股票每天的价格,请问买卖多次的情况下,最大化利润是多少?(日期不重...原创 2020-11-29 13:46:52 · 856 阅读 · 0 评论 -
GO实现:leetcode之寻找两个正序数组的中位数
问题描述:给定两个大小为m和n的正序(从小到大)数组nums1和nums2。请你找出这两个正序数组的中位数,并且要求算法的时间度复杂度为O(log(m+n))你可以假设nums1和nums2不会同时为空。示例1:nums1 = [1,3]nums2 = [2]则中位数为2.0示例2:nums1 = [1,2]nums2 = [3,4]则中位数为(2+3)/2 = 2.5解法一:简单粗暴,将两个数组合并,两个有序数组的合并也是归并排序的一部分,然后根据奇数还是偶数,原创 2020-11-27 20:34:12 · 379 阅读 · 0 评论