1.兩數(shù)和問題
給定一個整數(shù)數(shù)組 nums 和一個整數(shù)目標值 target,請你在該數(shù)組中找出 和為目標值 的那 兩個 整數(shù),并返回它們的數(shù)組下標。
你可以假設每種輸入只會對應一個答案。但是,數(shù)組中同一個元素不能使用兩遍。
你可以按任意順序返回答案。
示例 1:
輸入:nums = [2,7,11,15], target = 9
輸出:[0,1]
解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
提示:
只會存在一個有效答案
解法1:暴力求解(一個嵌套for循環(huán)搞定)
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int i=0;i<nums.length-1;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];
}
}
暴力解法時間復雜度為O(N^2),空間復雜度為O(1)
解法2:利用hash表求解
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map=new HashMap<>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(target-nums[i])){
return new int[]{map.get(target-nums[i]),i};
}else{
map.put(nums[i],i);
}
}
return new int[0];
}
}
解法2的時間復雜度為O(N),空間復雜度為O(N)
2.整數(shù)反轉問題
給你一個 32 位的有符號整數(shù) x ,返回 x 中每位上的數(shù)字反轉后的結果。
如果反轉后整數(shù)超過 32 位的有符號整數(shù)的范圍 [?231, 231 ? 1] ,就返回 0。
假設環(huán)境不允許存儲 64 位整數(shù)(有符號或無符號)。
示例 1:
輸入:x = 123
輸出:321
解題思路:
一種是先將int轉成String,然后反向遍歷一下形成一個新的String然后再轉為long,判斷是否越界,如果越界則返回0,沒有越界則直接轉成int。但是這種比第一題的暴力求解還low。
第二種解法也相對簡單,我們可以通過每次對10取模得到末尾的數(shù)字,然后又將得到的數(shù)字乘以10,即可得到最終的結果,當然也需要判斷是否超過范圍。
以下為官方解法:
class Solution {
public int reverse(int x) {
int rev=0;
while(x!=0){
int pop=x%10;
x/=10;
if(rev>Integer.MAX_VALUE/10||(rev==Integer.MAX_VALUE/10&&pop>7))return 0;
if(rev<Integer.MIN_VALUE/10||(rev==Integer.MIN_VALUE/10&&pop<-8)) return 0;
rev=rev*10+pop;
}
return rev;
}
}
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/two-sum
著作權歸領扣網絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。