标签:有符号 tin 32位 一个 题目 style ring twosum 符号
1.题目:
给定一个整数数组,返回两个数字的索引,使它们相加到特定目标。
您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素。
鉴于nums = [2,7,11,15],target = 9, 因为nums [ 0 ] + nums [ 1 ] = 2 + 7 = 9, 返回[ 0,1 ]。
class Solution { public int[] twoSum(int[] nums, int target) { int[] a = new int[2]; for(int i=0;i<nums.length;i++){ for(int j=i+1;j<nums.length;j++){ if(nums[i]+nums[j]==target){ a[0]=i; a[1]=j; } } } return a; } }
思路:双循环 对数组中的值全部进行判断,返回索引。
优化思路:
class Solution { public int[] twoSum(int[] nums, int target) { if(nums==null || nums.length<2) return new int[]{0,0}; HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); for(int i=0; i<nums.length; i++){ if(map.containsKey(nums[i])){ return new int[]{map.get(nums[i]), i}; } else { map.put(target-nums[i], i); } } return new int[]{0,0}; } }
使用map, 使用target减去当前数组值,存储差值和当前数组值的索引,然后判断差值是否在数组内存在,如果存在,返回索引。节省时间复杂度。
题目2:给定32位有符号整数,整数的反向数字。
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; } }
思路:不断取余数,然后对上一次结果和这次余数进行拼接。 如果结果大于或小于整数最大值。
题目3:确定整数是否是回文。当它向前读取向后时,整数是回文。
class Solution { public boolean isPalindrome(int x) { if(x<0) return false; int num = 0; int a = x; while(x!=0){ num = num *10+x%10; x=x/10; } if(num!=a) return false; return true; } }
思路: 使用反转数的思路 将数先反转,然后判断是否与原数相等。
优化:循环条件真判断到数值数的1半。即x>num.或者
String string = Integer.toString(x); char[] chars = new char[string.length()]; for (int i = 0; i < string.length(); i++){ if (string.charAt(i) != string.charAt(string.length()-i-1)){ return false; } } return true;
将其存为String数组,然后循环使用Sting数组的charAt判断是否相等。
标签:有符号 tin 32位 一个 题目 style ring twosum 符号
原文地址:https://www.cnblogs.com/guoyunhao/p/9672240.html