优质算法题目

张开发
2026/4/9 19:18:31 15 分钟阅读

分享文章

优质算法题目
2025.12.8题目移动0给定一个数组 nums编写一个函数将所有 0 移动到数组的末尾同时保持非零元素的相对顺序。请注意 必须在不复制数组的情况下原地对数组进行操作。示例 1:输入: nums [0,1,0,3,12]输出: [1,3,12,0,0]示例 2:输入: nums [0]输出: [0]思路定义两个指针以数组的下标作为指针这样我们可以分割出三个区间由此我们只需要对几个区间进行解决问题。cur在从前往后遍历的过程中1.遇到0元素就:cur2.遇到非0元素就交换dest1元素和cur元素dest和cur都加加第一步我们就可以将dest和cur之间的元素全部都是0第二步我们就可以将dest前面的元素都是非0元素而且都还是保存之前的顺序。classSolution{publicvoidmoveZeroes(int[]nums){intcur0;intdest-1;while(cur!nums.length){if(nums[cur]0){cur;}else{swap(nums,dest1,cur);dest;cur;}}}privatevoidswap(int[]array,intl,intr){inttemparray[l];array[l]array[r];array[r]temp;}}合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入l1 [1,2,4], l2 [1,3,4]输出[1,1,2,3,4,4]示例 2输入l1 [], l2 []输出[]示例 3输入l1 [], l2 [0]输出[0]思路也就是我去确认我两个链表的头结点谁大开始当这个头结点。然后进行递归当是我的L1的节点值大于等于L2的值那么我L2后面所跟的节点就是L1同理我就可以知道当L2的值大于L1的值那么我后面跟的就是L2classSolution{publicListNodemergeTwoLists(ListNodelist1,ListNodelist2){if(list1null)returnlist2;if(list2null)returnlist1;if(list1.vallist2.val){list1.nextmergeTwoLists(list1.next,list2);returnlist1;}else{list2.nextmergeTwoLists(list1,list2.next);returnlist2;}}}

更多文章