class Solution {public int removeElement(int[] nums, int val) {int fast = 0;int slow = 0;for (fast = 0; fast < nums.length; fast++) {if (nums[fast] != val) {nums[slow] = nums[fast];slow++;}}return slow;}
}
用双指针写这道题,快慢指针初始值都为0,如果快指针所对应的值!=val,就把快指针对应的值赋值给慢指针,慢指针++,相等的话,不做操作,但是当遇到下一个不等的值时,不等处的值会覆盖相等处的值,最后,只需要return slow就会得到k的值了。
class Solution {public int minSubArrayLen(int target, int[] nums) {int i = 0;int sum = 0;int subl = Integer.MAX_VALUE;int result =Integer.MAX_VALUE;for (int j = 0; j < nums.length; j++) { //j为终止位置sum += nums[j];while (sum >= target) {subl = j - i + 1;result = Math.min(subl, result);sum = sum - nums[i];i++;}}return result == Integer.MAX_VALUE ? 0 : result;}
}
这道题用滑动窗口的思想来写,也可以说是移动的双指针。遍历,让j表示终止位置,i表示起始位置sum+=nums[j],用while循环判断,当sum>target的时候,记录当前子数组的长度subl,和result相比取小值,这时,在缩减长度,sum-=nums[i],i++,如果sum仍然大于目标值target,则更新result,否则,跳出while循环,最后,返回result。
class Solution {public int[][] generateMatrix(int n) {int start_x = 0;int start_y = 0;int loop = n / 2; // 循环次数int[][] nums = new int[n][n];int k = 1; // 计数器int offset = 1; // 每次循环后需要增加的偏移量while (loop > 0) {int i = start_y;int j = start_x;// 上边:从左到右遍历for (; j < start_x + n - offset; j++) {nums[start_x][j] = k++;}// 右边:从上到下遍历for (; i < start_y + n - offset; i++) {nums[i][j] = k++;}// 下边:从右到左遍历for (; j > start_y; j--) {nums[i][j] = k++;}// 左边:从下到上遍历for (; i > start_x; i--) {nums[i][j] = k++;}// 更新起始点和偏移量start_x++;start_y++;offset += 2;loop--;}// 如果n为奇数,填入中心元素if (n % 2 == 1) {nums[start_x][start_y] = k;}return nums;}
}
遵循循环不变量的原则来写这道题,这里的不变量指的时每条边的处理规则,用左闭右开。n*n正方形,则他要循环的此时为n/2次,offset代表的时偏移量。
class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {if (head == null || head.next == null || left == right)return head;ListNode dummy = new ListNode(0);dummy.next = head;ListNode pre = dummy;
//将pre移动到left的前一个位置for (int i = 0; i < left - 1; i++) {pre = pre.next;}ListNode curr = pre.next;ListNode thenext = null;//反转left到right之间的节点for (int i = left; i < right; i++) {thenext = curr.next;curr.next = thenext.next;thenext.next = pre.next;pre.next = thenext;}return dummy.next;}
}