12
返回列表 发新帖
楼主: nabulas
跳转到指定楼层
上一主题 下一主题
收起左侧

人到中年,失业1年多,现在重新开始

   
🔗
 楼主| nabulas 2025-1-14 07:24:26 | 只看该作者
全局:
刚才又做了这一题,我的教训是,

res[curr++] = nums[deque.peekLast()];   我写成了   res[curr++] = deque.peekLast();   始终忘记,单调栈里面存放的是index
  1. class Solution {

  2.     public int[] maxSlidingWindow(int[] nums, int k) {
  3.         
  4.         if(nums == null || nums.length < k){
  5.             return new int[]{};
  6.         }

  7.         Deque<Integer> deque = new ArrayDeque<>();

  8.         int[] res = new int[nums.length - k + 1];
  9.         int curr = 0;

  10.         for(int i = 0; i <= nums.length - 1; i++){

  11.             while(!deque.isEmpty() && nums[i] > nums[deque.peekFirst()]){
  12.                 deque.removeFirst();
  13.             }

  14.             deque.offerFirst(i);
  15.   
  16.             if(deque.peekLast() == i - k){
  17.                 deque.removeLast();
  18.             }

  19.             if( i >= k - 1){
  20.                 res[curr++] = nums[deque.peekLast()];
  21.             }
  22.         }

  23.         return res;  
  24.     }
  25. }
复制代码
回复

使用道具 举报

全局:
加油! zszs
回复

使用道具 举报

🔗
 楼主| nabulas 2025-1-15 08:15:17 | 只看该作者
全局:
今天用heap sort写了一下 912题

总结:

1. size--; 和 siftDown(nums, 0, size); 写反了。所以错了。这里要先size--,才能去siftdown
2.
  1. class Solution {

  2.     public int[] sortArray(int[] nums) {
  3.         
  4.         if(nums == null || nums.length == 0){
  5.             return nums;
  6.         }        

  7.         int size = nums.length;
  8.         
  9.         heapify(nums, size);

  10.         while(size > 0){

  11.             swap(nums, 0, size - 1);

  12.             size--;

  13.             siftDown(nums, 0, size);
  14.         }

  15.         return nums;
  16.     }

  17.     private void heapify(int[] nums, int size){
  18.         for(int i = (nums.length - 2)/2; i >= 0; i--){            
  19.             siftDown(nums, i, size);
  20.         }
  21.     }

  22.     private void siftDown(int[] nums, int index, int size){

  23.         while(index * 2 + 1 <= size - 1){

  24.             int leftChild = index * 2 + 1;

  25.             int biggerChild = leftChild;

  26.             if(index * 2 + 2 <= size - 1){

  27.                int rightChild = index * 2 + 2;

  28.                if(nums[leftChild] >= nums[rightChild]){
  29.                     biggerChild = leftChild;
  30.                 } else {
  31.                     biggerChild = rightChild;
  32.                 }
  33.             }   

  34.             if(nums[index] < nums[biggerChild]){
  35.                 swap(nums, index, biggerChild);
  36.                 index = biggerChild;  
  37.             } else {
  38.                 break;
  39.             }
  40.         }

  41.     }

  42.     private void swap(int[] nums, int a, int b){
  43.         int tmp = nums[a];
  44.         nums[a] = nums[b];
  45.         nums[b] = tmp;
  46.     }

  47. }
复制代码
回复

使用道具 举报

全局:
加油。继续。看好你
回复

使用道具 举报

全局:
加油加油,已加米
回复

使用道具 举报

🔗
Wen_LA 2025-1-17 07:32:29 来自APP | 只看该作者
全局:
加油加油! 看好你
回复

使用道具 举报

全局:
楼主加油!!!一定可以的,挺你💪💪💪
回复

使用道具 举报

全局:
加油!重新出发,一切都会好起来的
回复

使用道具 举报

🔗
knighty_nine 2025-1-18 00:42:05 | 只看该作者
全局:
加油楼主! 会越来越好!
回复

使用道具 举报

🔗
 楼主| nabulas 2025-1-27 05:48:30 | 只看该作者
全局:
第一轮面试过了。躺了10天,现在要继续鸡血,迎接10天后的4轮panel interview


216. Combination Sum III  



今天是这一题:
  1. class Solution {


  2.    public List<List<Integer>> combinationSum3(int k, int n) {


  3.        List<List<Integer>> res = new LinkedList<>();


  4.        if(k == 0){
  5.            return res;
  6.        }


  7.        helper(res, new LinkedList<>(), 0, 1, k, n);


  8.        return res;
  9.    }


  10.    public void helper(List<List<Integer>> res, List<Integer> tmp, int currSum, int start, int k, int n){


  11.        if(currSum > n || tmp.size() > k){
  12.            return;
  13.        }


  14.        if(currSum == n && tmp.size() == k){
  15.            res.add(new LinkedList<>(tmp));
  16.            return;
  17.        }


  18.        for(int i = start; i <= 9; i++){


  19.            tmp.add(i);
  20.            currSum += i;
  21.            helper(res, tmp, currSum, i + 1, k, n);


  22.            tmp.remove(tmp.size() - 1);
  23.            currSum -= i;         
  24.        }
  25.    }
  26. }

  27. Not confirm yet

  28. Time: (9! * K) / (9-k)!
  29. Space: K
复制代码
这题的时间复杂度要怎么分析?  我真的百思不得其解。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表