算法训练Day03 | 203.移除链表元素、707.设计链表、206. 反转链表
我新建的个人博客,欢迎访问:hmilzy.github.io
203.移除链表元素题目链接: 移除链表元素
若要移除链表中某一个结点,需要分为两种情况:1.移除中间结点:让上一个结点next指向下一个结点2.移除头结点,则直接让头结点后移即可3.因此,为了想让链表移除结点操作逻辑统一,则可以加上一个虚拟头结点,也就是让虚拟头结点dummyhead的 next 指向头结点head。那么这样的话,移除头结点也只需要将虚拟头结点指向头结点的下一个结点就行了,逻辑得到统一。4.而且,一般链表类题目的返回值是链表的头结点,题目中难以去额外保存一个头结点。如果设置了虚拟头结点的话,那么就可以直接返回dummyhead.next
123456789101112131415161718192021222324252627282930313233/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() & ...
算法训练Day02 | 977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
我新建的个人博客,欢迎访问:hmilzy.github.io
977.有序数组的平方题目链接: 有序数组的平方
自己最先想到的思路是先遍历数组,每个元素平方。然后再对数组进行排序。但是复杂度可能较高。
思路:对于一个有正有负的有序数组,运用双指针,从数组两端开始比较并移动,较大的平方值放入新数组的最后一个位置,依次执行。
1234567891011121314151617181920212223class Solution { public int[] sortedSquares(int[] nums) { int len = nums.length; int left = 0; int right = len - 1; int pos = len - 1; int[] result = new int[len]; while(left <= right){ //若左指针平方数更大,则将左边的数放入新数组,并且左指针右移 ...
test-找工作
Welcome to java-note
算法训练Day01 | 704.二分查找、27.移除元素
704.二分查找题目链接: 二分查找
思路:比较数组中间位置的值nums[middle]和目标值target的大小,从而确定查找的左右区间个人习惯用左闭右闭的形式[left,right],循环条件是left <= right
1234567891011121314151617181920class Solution { public int search(int[] nums, int target) { int left = 0; int right = nums.length - 1; while(left <= right){ int middle = left + (right - left) / 2; if(target > nums[middle]){ left = middle + 1; } if(target < num ...
test-java-note
Welcome to java-note
test-framework-note
Welcome to framework-note
Hello World
UpdateWelcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment