我是靠谱客的博主 无奈小伙,最近开发中收集的这篇文章主要介绍leetcode刷题记录及总结第一次提交的答案第一次提交的代码2022年3月17日学习产出:,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
今日刷题:
LeetCode 217
第一次提交的答案
题目:给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
class Solution {
public boolean containsDuplicate(int[] nums) {
//思路,每个数字都和剩下的数字比较,遍历一遍
if(nums.length==1) return false;
int value = 0;
for(int i=0;i<nums.length-1;i++){//只需要遍历到倒数第二个即可
for(int j=i+1;j<nums.length;j++){
if(nums[i]==nums[j]) {return true;
}
}
}
return false;
}
}
力扣:21 合并两个有序链表
第一次提交的代码
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
//思路:循环+双指针
//当链表1的值大于等于链表2的值时,链表1的指针不动,链表2的指针给新的链表,同时链表2的指针往下移动一位
//当链表1的指针指向空时,将链表2的指针赋给结果链表
ListNode resultNode = new ListNode();//这是一个新链表
ListNode head = resultNode;//获取到他的头结点
while(list1!=null&&list2!=null){
if(list1.val>=list2.val){
head.next=list2;//这个表示head结点变成了list2的结点
list2=list2.next;
}
else{
head.next=list1;
list1=list1.next;
}
head=head.next;//获取到data域的值
}
if(list1==null) {head.next=list2;}
if(list2==null) {head.next=list1;}
return resultNode.next;
}
}
2022年3月17日
力扣刷题 :数组,力扣第一题和第88题
题号:88,合并两个有序数组
内容:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。
第一次提交的代码:
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
/*使用jdk中Arrays类提供的sort方法中缺陷是浪费了题目提供好的
已经有序的条件
解法思路2:循环+双指针,数组中我们的指针就是索引
for循环
判断数组1中的值是否大于数组二中的值
如果数组1的值大于数组2的值则,数组2的值赋予新的数组中,
同时数组2的指针下移一位
*/
int[] result = new int[m+n];
int all = m+n;
int index1=0;
int index2=0;
for(int i=0;i<all;i++){
if(index1>=m){//数组1的取完,接下来取数组2的
result[i]=nums2[index2++];
}else if(index2>=n){
result[i]=nums1[index1++];
}else{
if(nums1[index1]>=nums2[index2]){
result[i]=nums2[index2++];
}else{
result[i]=nums1[index1++];
}
}
}
for(int j=0;j<all;j++) {nums1[j]=result[j];}
}
}
心得体会:
- if判断和for循环结合在一起使用时,注意if条件的判断顺序,注意数组指针和for循环里的指针里的表示的不一样,我们这里用到了三个指针,但是之前得第一遍代码的时候,if条件中只用了result中的指针来判断,这是不合理的。
- 注意正向写判断很复杂的时候不如反过来写他的异或条件
题号:1 两数之和
内容:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
class Solution {
public int[] twoSum(int[] nums, int target) {
思路:建立一个哈希表,将扫描过得数组放入哈希表中,
新建一个哈希表,用于存放扫描过得数组,key为数组的值,value为下标
新建一个数组,用于存放得到的数组下标
对扫描的每一个数组进行判断,如果符合要求则返回该值得下标
若不符合则添加进哈希表中
Map<Integer,Integer> storeNums = new HashMap<>(nums.length,1);
int[] result = new int[2];
// int another=0;
for(int i=0;i<nums.length;i++){
int another = target - nums[i];
Integer anotherIndex = storeNums.get(another);
if(anotherIndex!=null){
result[0] = anotherIndex;
result[1] = i;
break;
}else{
storeNums.put(nums[i],i);
}
}
return result;
}
}
心得体会
- 哈希表就是普通的key-value形式
- 创建哈希表的时候我们需要声明key和value的变量类型,在java中声明新的变量一定要写new
- get()方法 获取制定key对应的value
- put()方法 将键值对添加到哈希表中
- break可以使用在,我们一旦获取到我们所需要的结果是 退出循环!
学习产出:
- 注意边界条件
- 至少出现两次的话,需要注意fro循环的边界条件
- 单链表中每个结点都有data域和next域,只有满足这两个域都有值,才是一个完整的结点。
- 当使用双指针的时候,注意判断条件。
- 数组也可以使用指针来解决问题,指针就是他的索引。
最后
以上就是无奈小伙为你收集整理的leetcode刷题记录及总结第一次提交的答案第一次提交的代码2022年3月17日学习产出:的全部内容,希望文章能够帮你解决leetcode刷题记录及总结第一次提交的答案第一次提交的代码2022年3月17日学习产出:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复