力扣个人刷题记录

leavesMING 2026-06-13 16:24 1

最近正常尝试投简历找实习,需要刷点题来应对一下,就简单刷了点题,先刷hot100和代码随想录有讲解的题,会简单记录一下我的思路和过程。




1.两数之和

暴力和哈希表,暴力就是简单遍历;哈希表,使用空间换时间,哈希表查询key,插入key都是常数时间复杂度


class Solution {
public int[] twoSum(int[] nums, int target) {
for (int i = 0 ; i < nums.length; ++i){
for (int j =i+1; j < nums.length;++j){
if (nums[i]+nums[j]==target){
return new int[]{i,j};
}
}
}
return new int[0];
}
}

哈希表


class Solution {
public int[] twoSum(int[] nums, int target) {
Map <Integer,Integer>hashtable = new HashMap<Integer,Integer>();
for (int i = 0; i < nums.length; ++i){
if (hashtable.containsKey(target - nums[i])){
return new int[]{hashtable.get(target - nums[i]),i};
}
hashtable.put(nums[i],i);
}
return new int[0];
}
}




704.二分查找

简单的数组二分查找,只要搞清循环的边界和左右指针的替换规则即可


class Solution {
public int search(int[] nums, int target) {
if (target < nums[0] || target > nums[nums.length - 1]) {return -1;}
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = (left + right) >> 1;
if (nums[mid] == target) {return mid;}
else if (nums[mid] < target) {left = mid + 1;}
else { right = mid - 1;}
}
return -1;
}
}

最新回复 (1)
  • leavesMING 楼主 06-13 17:12
    1

    双指针,每次移动较小的指针,算是一种贪心算法,移动小的不一定会更好,但是移动大的一定会更差,感觉证明挺难的,我看题解也没有说的很明白的,就先搁置了,接雨水这个感觉只能死记硬背了




    11.盛最多水的容器

    class Solution {
    public int maxArea(int[] height) {
    int left = 0 ,right = height.length - 1 , result = 0;
    while(left < right){
    int area = Math.min(height[left],height[right]) * (right - left);
    result = Math.max(result,area);
    if(height[left] < height[right]){
    left++;
    }
    else{
    right--;
    }
    }
    return result;
    }
    }

* 帖子来源Linux.do
返回