LeetCode刷题日记(最少操作使数组递增)

39 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
最少操作使数组递增

题目描述

image.png

解题思路

使用贪心算法,循环遍历数组,比较每个数和前一个数的大小,如果当前数比前一个数大,则不操作,反之则计算和前一个数的差dif,则当前数需要的最小操作数为dif+1,需要注意的是当前数也要同时加上dif+1,不然下个数的计算会出错。 可以很很简单的写出一下代码:

var minOperations = function(nums) {
   let count = 0;
   if(nums.length <= 1) {  // 如果数组长度小于1需要单独处理
       return 0
   } else {
       for(let i = 1; i<nums.length;i++){
           if(nums[i] > nums[i-1]) {
               continue;
           } else {
               let dif = nums[i-1] - nums[i]
               nums[i] += dif + 1; // 这一步不能少
               count += dif + 1
           }
       }
   }

   return count;
};

合并两个链表

题目描述

image.png

解题思路

本题可以采用递归的方式来解决,首先我们需要清楚三个点:
1.递归的终止条件
当list1或者list2为空时,一个链表已经比较完毕,另一个链表的剩下的节点都是已经排好序的,两个链表拼接完成,递归结束
2.递归返回值
每一次递归都返回已经排序好的链表头节点
3.递归的表达式
当list1值大于等于list2时,list2.next = mergeTwoLists(list1,list2.next), list2.next与排好序的链表头节点相接
当list1值小于list2时,list1.next = mergeTwoLists(list1.next,list2),list1.next与排好序的链表头节点相接

var mergeTwoLists = function(list1, list2) {
   if(list1 == null) {
       return list2
   } else if(list2 == null) { // 当某个节点为空时结束递归 条件一
       return list1
   } else if(list1.val >= list2.val) { // 将list2.next继续进入递归 条件三
       list2.next = mergeTwoLists(list1,list2.next)
       return list2   // 条件二
   } else {
       list1.next = mergeTwoLists(list1.next,list2)
       return list1
   }
};