自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 Hangman game

Hangman Gameimport randomfrom words import wordsfrom hangman_visual import lives_visual_dictimport stringdef get_valid_word(words): word = random.choice(words) # randomly chooses something from the list while '-' in word or ' ' in word:

2021-04-15 21:47:46 146

原创 每日新增用户的次日留存率

每日新增用户的次日留存率给定user_behavior表,要求查询次日,7日和30日用户留存率。WITH new_user AS ( SELECT user_id, MIN(time) AS first_login FROM user_behavior WHERE user_behavior_id = 1 GROUP BY user_id),next_times AS ( SELECT new_user.user_id, new_user.first_log

2021-04-13 14:53:30 986

原创 连续7日用户提取

连续7日用户提取先对每天的用户去重(distinct day,user_id)然后开窗排序(row_numer()over(partition by user_id order by day) rn)最关键的一点来了,是用日期减去排序的序号(day-rn),如果是连续的日期,那么序号必然也是按顺序+1的。自然(day-rn)的值是一样的(相当于将用户的连续访问的时间段做了一个标记,一个时间段用一个数值来代表)。最后再统计一下每个用户差值的计数数量,就能筛选出大于X天的用户了。#求30天内的连续7天访

2021-04-13 14:27:57 135

原创 Hadoop

HadoopGFS插入图片MapReduce插入图片Hadoop:HDFSMapReduceYarmP37

2021-04-08 11:14:04 58

原创 shell & zookeeper

shell & zookeeper 学习day1(p17-p26)局部变量#!/bin/hashstr = "hello"echo ${str}world环境变量,系统已经定义好的变量运算符注意是否留空格很重要#!/bin/hasha=1;b=2;echo `expr $a + $b`;echo $((a+b));echo $[a+b];然后在做乘法的时候要加/*for循环的写法#!/bin/hashfor N in 1 2 3do echo $Nd

2021-04-06 15:55:56 115

原创 922. 按奇偶排序数组 II

922. 按奇偶排序数组 II难度:Low掌握程度:Lowvar sortArrayByParityII = function(nums) { let j = 1; for(let i=0;i<nums.length;i+=2){ if(nums[i]%2 === 1){ while(nums[j]%2 === 1 && j<nums.length){ j+=2;

2021-04-04 19:44:40 41

原创 905. 按奇偶排序数组

905. 按奇偶排序数组难度:Low掌握程度:Lowvar sortArrayByParity = function(A) { let i = 0, j = A.length -1; while(i<j){ if(A[i]%2 === 1 && A[j]%2 === 0){ [A[i],A[j]] = [A[j],A[i]]; i++; j--; }else i

2021-04-04 19:35:20 46

原创 876. 链表的中间结点

876. 链表的中间结点难度:Low掌握程度:Lowvar middleNode = function(head) { let slow = head; let fast = head; while(fast !== null && fast.next !== null){ slow = slow.next; fast = fast.next.next; } return slow;};...

2021-04-04 10:21:43 54

原创 844. 比较含退格的字符串

844. 比较含退格的字符串难度:Low掌握程度:Lowvar backspaceCompare = function(S, T) { let i = S.length - 1, j = T.length -1; let backspaceS = 0, backspaceT = 0; while(i>=0 || j>=0){ while(i>=0){ if(S[i

2021-04-04 10:15:07 46

原创 836. 矩形重叠

836. 矩形重叠难度:Low掌握程度:Lowrec1右 <= rec2左rec1左>= rec2右rec1下 >= rec2上rec1 上<= rec2下var isRectangleOverlap = function(rec1, rec2) { if(rec1[2] <= rec2[0] || rec1[0] >= rec2[2] || rec1[1] >= rec2[3] || rec1[3] <= rec2[1]){

2021-04-04 10:00:29 40

原创 796. 旋转字符串

796. 旋转字符串难度:Low掌握程度:Low这道题就很有技巧性,比方A = ‘abcde’, B = ‘cdeab’那么复制一个A,就是 ‘abcdeabcde’var rotateString = function(A, B) { if(A.length !== B.length){ return false; } const str = A + A; return str.includes(B);};...

2021-04-03 12:17:27 52

原创 733. 图像渲染

733. 图像渲染难度:Low掌握程度:Lowvar floodFill = function(image, sr, sc, newColor) { if(image[sr][sc] === newColor){ return image; } const oldColor = image[sr][sc]; function dfs(sr,sc){ if(sr < 0 || sr>=image.length || sc&lt

2021-04-03 12:04:48 57

原创 704. 二分查找

704. 二分查找难度:Low掌握程度:Lowvar search = function(nums, target) { let left = 0,right = nums.length-1 while(left<=right){ mid = Math.floor(left + (right - left)/2); if(nums[mid] === target){ return mid; }else if(

2021-04-03 10:38:05 51

原创 695. 岛屿的最大面积

695. 岛屿的最大面积难度:Medium掌握程度:Lowvar maxAreaOfIsland = function(grid) { let result = 0; for(let row = 0;row<grid.length;row++){ for(let col=0;col<grid[0].length;col++){ if(grid[row][col] === 1){ const count

2021-04-03 10:29:23 59

原创 680. 验证回文字符串 Ⅱ

680. 验证回文字符串 Ⅱ难度:Low掌握程度:Lowvar validPalindrome = function(s) { function isPalindrome(left,right){ while(left<right){ if(s[left] !== s[right]){ return false; } left++; right-

2021-04-03 10:11:29 49

原创 509. 斐波那契数

509. 斐波那契数难度:Low掌握程度:LowTop-down解法var fib = function(n) { if(n <= 1){ return n; } #有一个叫cache的容器去memozie元素 const cache = []; cache[0] = 0; cache[1] = 1; function memoize(number){ #如果cache里面有这个数,那么就return这个数

2021-04-03 09:57:20 37

原创 445. 两数相加 II

445. 两数相加 II难度:Medium掌握程度:Low有两个栈,分布装两组不同的数,从尾部相加,但是最后为了避免反转列表,可以利用指针的指向来进行反转var addTwoNumbers = function(l1, l2) { const stack1 = [], stack2 = []; while(l1 !== null){ #把数字push到栈里 stack1.push(l1.val); l1 = l1.next; }

2021-04-02 14:23:07 59

原创 419. 甲板上的战舰

419. 甲板上的战舰难度:Medium掌握程度:Lowvar countBattleships = function(board) { let result = 0; for(let row = 0; row<board.length;row++){ for(let col=0;col<board[0].length;col++){ if(board[row][col] === "X"){ resul

2021-04-02 13:14:28 56

原创 349. 两个数组的交集

349. 两个数组的交集难度:Low掌握程度:Low暴力解法var intersection = function(nums1, nums2) { const result = new Set(); for(num of nums1){ #如果num2中还有num,就加进去 if(nums2.includes(num)){ result.add(num); } } #题目最后要求返回一个array,而不是

2021-04-02 12:52:16 44

原创 328. 奇偶链表

328. 奇偶链表难度:Medium掌握程度:Lowvar oddEvenList = function(head) { if(head === null){ return null; } if(head.next === null){ return head; } #定义指针位置 let odd = head; let even = head.next; #这个指针是固定用的,用来返回最后的链表

2021-04-02 12:27:55 44

原创 283. 移动零

283. 移动零难度:Low掌握程度:Low把不是0的数向前移动,然后循环结束,把后面的数填成0var moveZeroes = function(nums) { let j = 0 ; for(let i = 0;i<nums.length;i++){ if(nums[i] !== 0){ nums[j] = nums[i]; j++; } } for(i=j;i<nums

2021-04-02 12:12:43 35

原创 242. 有效的字母异位词

242. 有效的字母异位词难度:Low掌握程度:Lows: 1t: -1var isAnagram = function(s, t) { if(s.length !== t.length){ return false; } const map = new Map(); for(let i=0;i<s.length;i++){ if(map.has(s[i])){ #set里面的意思是{key, value}

2021-04-02 12:02:48 21

原创 238. 除自身以外数组的乘积

238. 除自身以外数组的乘积难度:Medium掌握程度:Low这个意思就是从左向右遍历一边,再从右向左遍历一遍var productExceptSelf = function(nums) { const result = Array(nums.length).fill(1); let product = 1; #从前向后遍历 for(let i=0;i<nums.length;i++){ result[i] = result[i]*produc

2021-04-01 15:13:09 20

原创 219. 存在重复元素 II

219. 存在重复元素 II难度:Low掌握程度:Lowvar containsNearbyDuplicate = function(nums, k) { const map = new Map(); for(let i =0;i<nums.length;i++){ #map集合里有这个元素,并且现在的数和map里面的数相减小于k,也就是在3步内可以到达 if(map.has(nums[i]) && (i - map.get(nums[i]

2021-04-01 14:09:43 29

原创 217. 存在重复元素

217. 存在重复元素难度:Low掌握程度:Lowvar containsDuplicate = function(nums) { const set = new Set(); for(let i = 0;i<nums.length;i++){ if(set.has(nums[i])){ return true; } set.add(nums[i]); } return false;};

2021-04-01 11:48:36 25

原创 200. 岛屿数量

200. 岛屿数量难度:Medium掌握程度:Low知识点:bfs: 广度优先搜索(四周搜索)dfs: 深度优先搜索(向下)var numIslands = function(grid) { let count = 0; function dfs(row,col){ #防止越界 if(row<0 || row>= grid.length || col<0 || col>= grid[0].length || grid[row][co

2021-04-01 11:37:13 51

原创 198. 打家劫舍

198. 打家劫舍难度:Medium掌握程度:Lowvar rob = function(nums) {#边界 if(nums.length === 0){ return 0; } if(nums.length === 1){ return nums[0]; } const memo = []; memo[0] = nums[0]; memo[1] = Math.max(nums[0],nums[1]);

2021-04-01 09:26:30 38

原创 Shopee_187. 重复的DNA序列

187. 重复的DNA序列难度:Medium掌握程度:Low速度比较慢var findRepeatedDnaSequences = function(s) { const map = new Map(); const result = []; let i = 0; while(i+10<= s.length){ const dna = s.substring(i,i+10); if(map.get(dna) === undefin

2021-04-01 09:00:38 52

原创 160. 相交链表

160. 相交链表难度:Low掌握程度:Low原理是这样的,n1比n2走的快一步(因为n1比较少),所以n1是先走完的,闲着了,所以现在指派n1去B的头部,好,n2终于走完了,现在可以指派N2去A的头部,走两步就相交了var getIntersectionNode = function(headA, headB) { let n1 = headA; let n2 = headB; while(n1 !== n2){ if(n1 === null){

2021-03-31 15:18:45 36

原创 153. 寻找旋转排序数组中的最小值

153. 寻找旋转排序数组中的最小值难度:Medium掌握程度:Lowvar findMin = function(nums) { if(nums.length === 1){ return nums[0] } let left = 0, right = nums.length-1; if(nums[right] > nums[0]){ return nums[0]; } while (left < righ

2021-03-31 14:55:51 42

原创 152. 乘积最大子数组

152. 乘积最大子数组难度:Medium掌握程度:Lowvar maxProduct = function(nums) { const maxProductMemo = []; const minProductMemo = []; maxProductMemo[0] = nums[0]; minProductMemo[0] = nums[0]; let max = nums[0]; for(let i=1;i<nums.length;i++)

2021-03-31 14:04:32 36

原创 142. 环形链表 II

142. 环形链表 II难度:Medium掌握程度:Low弗洛伊德算法,也就是快慢指针相遇之后,把快指针放到头部,满指针继续走,直到相遇var detectCycle = function(head) { if(head === null){ return null; } let slow = head; let fast = head; let isCycle = false; while(fast.next !== null &am

2021-03-31 13:49:59 34

原创 141. 环形链表

141. 环形链表难度:Low掌握程度:Low想象家里面的时针和分针,总是有重合的时候,fast 和slow指针也是这样var hasCycle = function(head) { if(head === null){ return false; } let slow = head; let fast = head; while(fast.next !== null && fast.next.next !== null){

2021-03-31 13:27:56 28

原创 134. 加油站

134. 加油站难度:Medium掌握程度:Lowvar canCompleteCircuit = function(gas, cost) { let totalGas = 0; let totalCost = 0; for(let i = 0;i<gas.length;i++){ totalGas += gas[i]; totalCost += cost[i]; } if(totalGas < totalCost)

2021-03-31 13:10:57 52

原创 125. 验证回文串

125. 验证回文串难度:Low掌握程度:Lowvar isPalindrome = function(s) { s = s.toLowerCase().replace(/[\W_]/g,"");#小于2,字符才1个,无需验证 if(s.length<2){ return true; } #left 和 right互相验证 let left = 0; let right = s.length-1; while(left&l

2021-03-31 12:27:53 25

原创 122. 买卖股票的最佳时机 II

122. 买卖股票的最佳时机 II难度:Low掌握程度:LowJavascript(速度慢)var maxProfit = function(prices) { if(prices.length === 0){ return 0; } # valley代表最低点,peak 代表最高点 let profit = 0, valley = prices[0], peak = prices[0]; let i = 0; while(i<p

2021-03-30 12:14:54 30

原创 leetcode第一百二十一题_买卖股票的最佳时机

leetcode第一百二十一题_买卖股票的最佳时机难度:Low掌握程度:Lowvar maxProfit = function(prices) { if(prices.length === 0){ return 0; } #随便定义一个最小的价格,比方说是第一个数 let minPrice = prices[0], maxProfit = 0; #由于数组是从0开始遍历的,所以它只会和它左面的那个数去比较(也就是可能的买入价),也就是不会存在买入

2021-03-30 11:28:17 42

原创 leetcode第九十二题_反转链表2

leetcode第九十二题_反转链表2难度:Medium掌握程度:Lowvar reverseBetween = function(head, m, n) {#和反转列表1一样设置3个指针 let prev = null; let curr = head; let next = head; for(let i = 1;i<m;i++){ prev = curr; curr = curr.next; } #另外设置2个固定指针

2021-03-30 10:39:18 45

原创 leetcode第两百零六题_反转链表

leetcode第两百零六题_反转链表难度:Low掌握程度:Lowvar reverseList = function(head) {#设置3个指针 let prev = null; let curr = head; let next = head; while(curr !== null){ #循环 next = curr.next; curr.next = prev; prev = curr;

2021-03-30 10:05:45 64

原创 leetcode第八十三题_删除排序链表中的重复元素

leetcode第八十三题_删除排序链表中的重复元素难度:Low掌握程度:Lowvar deleteDuplicates = function(head) { let current = head; #已经到数组到结尾或者没有下一个数就不用循环了 while(current !== null && current.next !== null){ if(current.val === current.next.val){ #如果现在

2021-03-29 18:33:25 46

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除