大家好,从今天起 我就要准备正式刷题了,先从简单题刷起,没错,83和88题都是简单题,因此没什么思路或总结好说,只有第88题需要注意一下不可以直接用一个数组给另一个数组赋值,否则地址会变,结果自然就是错误的。
第83题:
/**
* 83、删除排序链表中的重复元素
* 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
*
* 示例 1:
* 输入: 1->1->2
* 输出: 1->2
*
* 示例 2:
* 输入: 1->1->2->3->3
* 输出: 1->2->3
*/
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class DelDuplicate {
public static void main(String[] args) {
int[] test = {1,1,2};
ListNode head = new ListNode(test[0]);
ListNode node = head;
for (int i = 1;i<test.length;i++){
node.next = new ListNode(test[i]);
node = node.next;
}
head = deleteDuplicates(head);
while (head!=null){
System.out.print(head.val+"-->");
head = head.next;
}
}
public static ListNode deleteDuplicates(ListNode head) {
if (head==null){
return null;
}
int k = head.val; //遍历到的节点值的前一个节点值
ListNode p = head; //遍历到的节点的前一个节点
ListNode q = head.next; //当前遍历到的节点
while (q!=null){
int i = q.val; //遍历到的节点值
if (k == i){
p.next = q.next; //删除p节点后面重复的节点值
q = p.next; //更新当前遍历到的节点值位置
}else {
p = q;
q = q.next;
k = p.val;
}
}
return head;
}
}
第88题:
/**
* 88.合并两个有序数组
* 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
* 示例:
*
* 输入:
* nums1 = [1,2,3,0,0,0], m = 3
* nums2 = [2,5,6], n = 3
* 输出: [1,2,2,3,5,6]
*/
public class MergeArray {
public static void main(String[] args) {
int[] nums1 = {1,2,3,0,0,0};
int[] nums2 = {2,5,6};
int m = 3;
int n = 3;
merge(nums1,m,nums2,n);
}
public static void merge(int[] nums1, int m, int[] nums2, int n) {
int i = 0;
int j = 0;
int count = 0;
int[] nums = new int[nums1.length];
for (int k = 0; k < nums1.length; k++) {
nums[k] = nums1[k]; //中转数组
}
while(m!=0&&n!=0){
if (nums[i]<nums2[j]){
nums1[count] = nums[i];
i++;
m--;
count++;
}else {
nums1[count] = nums2[j];
j++;
n--;
count++;
}
}
while (m!=0){
nums1[count] = nums[i];
i++;
count++;
m--;
}
while (n!=0){
nums1[count] = nums2[j];
j++;
count++;
n--;
}
}
}
这里88题需要注意,不可以直接将
数组1 = 数组2
这是将数组2的地址赋给了数组1,如此数组2中的数据改变,数组1的也会跟这边,且数组1原地址所存的数据并没有改变。