首页 > 编程语言 >代码随想录算法训练营第5天 | lc242、lc349、lc202、lc1

代码随想录算法训练营第5天 | lc242、lc349、lc202、lc1

时间:2023-12-03 22:24:04浏览次数:43  
标签:return lc1 int make 随想录 lc349 note num ok

(本合集全部为Go语言实现)

相关文章链接:242题解 349 202题解 1题解
相关视频链接:

Leetcode242

状态:秒了
实现过程中的难点:对于元素固定是小写字母或类似的情况,可以使用数组,因为元素最大数量是固定的

个人写法

func isAnagram(s string, t string) bool {
  if len(s) != len(t) {
    return false
  }
  note := make([]int, 26)
  for _, c := range s {
    note[int(c) - 'a']++
  }
  for _, c := range t {
    if (note[int(c) - 'a'] == 0) {
      return false
    }
    note[int(c) - 'a']--
  }
  return true
}

Leetcode349

状态:思路可以秒,过了
实现过程中的难点:遍历第一个数组,将其中的元素存到一个set中,再遍历第二个数组判断元素是否在set

个人写法

func intersection(nums1 []int, nums2 []int) []int {
  note := make(map[int]bool)
  res := make([]int, 0)
  for _, num := range nums1 {
    note[num] = true
  }
  for _, num := range nums2 {
    if v, ok := note[num]; ok && v {
      res = append(res, num)
      note[num] = false
    }
  }
  return res
}

Leetcode202

状态:秒了
实现过程中的难点:就是把每次的结果存下来,如果后续循环中发现已经存在,就说明值循环了,就不可能是快乐数了

个人写法

func isHappy(n int) bool {
  note := make(map[int]bool)
  for n != 1 {
    if _, ok := note[n]; ok {
      return false
    }
    note[n] = true
    curSum := 0
    for n != 0 {
      cur := n % 10
      curSum += cur * cur
      n /= 10
    }
    n = curSum
  }
  return true
}

Leetcode1

状态:稍微耗了一些时间
实现过程中的难点:代码中需要考虑到返回值中的两个下标不能相等

个人写法

看了题解之后的改进写法

func twoSum(nums []int, target int) []int {
  note := make(map[int]int)
  for i, num := range nums {
    if _, ok := note[target - num]; ok {
      return []int {i, note[target - num]}
    }
    note[num] = i
  }
  return []int {-1, -1}
}

今日收获

  • 复习了一下哈希表类型的题目整体的思路,一般来说都是使用哈希表来记录之前的状态来使后续过程使用到前边的状态
  • 这块涉及到了Go的Map等的使用,需要使用Map来模拟Set

学习时长:2小时左右

标签:return,lc1,int,make,随想录,lc349,note,num,ok
From: https://www.cnblogs.com/geJoyo/p/17873919.html

相关文章

  • 代码随想录算法训练营第4天 | lc24、lc19、lc面试题02.07、lc142
    (本合集全部为Go语言实现)相关文章链接:24题解19题解02.07题解142题解相关视频链接:Leetcode24状态:秒了实现过程中的难点:对组内两个节点的指针指向流转需要倒腾明白。临时头结点真的很有用个人写法funcswapPairs(head*ListNode)*ListNode{tmpHead:=&ListNode{-......
  • 代码随想录算法训练营第3天 | leetcode203、leetcode707、leetcode206
    (本合集全部为Go语言实现)相关文章链接:203题解707题解206题解相关视频链接:Leetcode203状态:秒了实现过程中的难点:链表遍历一定要记得指针后移。另外,在头指针前加入一个新的临时头节点可以统一整个遍历过程,否则需要先确定初始时两指针的状态个人写法/***Definitionfo......
  • 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节
    LeetCode24.两两交换链表中的节点题目链接:LeetCode24思路:交换结点前将cur后第一个结点和第三个结点进行保存,然后修改cur指向头节点后再修改头节点后的结点classSolution{public:ListNode*swapPairs(ListNode*head){ListNode*dummyHead=newListNo......
  • 代码随想录算法训练营第三天 | 203.移除链表元素 707.设计链表 206.反转链表
    LeetCode 203.移除链表元素视频链接:LeetCode203思路:根据链表的性质,将目标值对应的节点保存在一个临时节点中,再重新设置cur下一个节点,再将临时节点进行删除classSolution{public:ListNode*removeElements(ListNode*head,intval){//删除头节点......
  • 代码随想录day4链表2
    day424.两两交换链表中的节点19.删除链表的倒数第N个节点面试题02.07.链表相交142.环形链表II总结资料来源:代码随想录(programmercarl.com)5.两两交换链表中的节点classSolution{private:/*data*/public:Solution(/*args*/);~Solution();......
  • 代码随想录day3链表1
    链表理论基础203.移除链表元素707.设计链表206.反转链表资料来源:代码随想录(programmercarl.com)1链表理论基础定义:是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。......
  • 代码随想录day2
    977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II,总结1有序数组的平方​ 给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。2长度最小的子数组给定一个含有n个正整数的数组和一个正整数s,找出该数组中满......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
    LeetCode704二分查找题目链接:LeetCode704左闭右闭:视频讲解:手把手带你撕出正确的二分法思路:在循环条件中注明left<=right,即[left,right]classSolution{public:intsearch(vector<int>&nums,inttarget){intleft=0,right=nums.size()-1......
  • 代码随想录-哈希
    242.有效的字母异位词https://leetcode.cn/problems/valid-anagram/description/classSolution{public:boolisAnagram(strings,stringt){if(s.size()!=t.size())returnfalse;inthash[26]={0};for(inti=0;i<s.size......
  • 代码随想录-链表
    203.移除链表元素https://leetcode.cn/problems/remove-linked-list-elements/description//***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):......