26.删除排序数组中的重复项
java代码:
class Solution {
public int removeDuplicates(int[] nums) {
int a=0;
for(int i=1;i<nums.length;i++){
if(nums[a]!=nums[i])
{
nums[++a]=nums[i];
}
}
return a+1;
}
}
543.二叉树的直径
java代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int ans;
public int diameterOfBinaryTree(TreeNode root) {
ans =1;
depth(root);
return ans-1;
}
public int depth(TreeNode node){
if(node==null) return 0;
int L=depth(node.left);
int R=depth(node.right);
ans=Math.max(ans,L+R+1);
return Math.max(L,R)+1;
}
}
1071.字符串的最大公因子
java代码:
class Solution {
public String gcdOfStrings(String str1, String str2) {
/*
如果 str1 和 str2 存在最大公约数 str,那么就相当于 str1 和 str2 都是由 str 组成的,那么 str1 + str2 和 str2 + str1 应该是相等的
如果不满足,那么不存在最大公约数
我们可以通过 两个字符串的长度来求得最大公约数的长度
比如 str1 = "ABABAB", str2 = "ABAB"
len1 = 6 len2 = 4
那么最大公约数 str = "AB"
len = 2
*/
if(!(str1 + str2).equals(str2 + str1)){
return "";
}
return str2.substring(0, gcd(str1.length(), str2.length()));
}
/* a b
18 12
18 % 12 = 6 12 6
12 % 6 = 0 6 0
*/
private int gcd(int a, int b){
//保证 a 比 b 大
if(a < b){
return gcd(b, a);
}
if(a % b == 0){
return b;
}else{
return gcd(b, a % b);
}
}
}
面试题3.数组中重复的数字
java代码:
class Solution {
public int findRepeatNumber(int[] nums) {
Arrays.sort(nums);
for(int i=0;i<nums.length-1;i++){
if(nums[i]==nums[i+1]){
return nums[i];
}
}
return -1;
}
}
344.反转字符串
java代码:
class Solution {
public void reverseString(char[] s) {
for(int l=0, r=s.length-1;l<r;l++,r--){
char temp=s[r];
s[r]=s[l];
s[l]=temp;
}
}
}
561.数组拆封
class Solution {
public int arrayPairSum(int[] nums) {
Arrays.sort(nums);
int sum=0;
for(int i=0;i<nums.length-1;i+=2){
sum+=nums[i];
}
return sum;
}
}
977.有序数组的平方
java代码:
class Solution {
public int[] sortedSquares(int[] A) {
for(int i=0;i<A.length;i++){
A[i]=A[i]*A[i];
}
Arrays.sort(A);
return A;
}
}
面试15.二进制中1的个数
java代码:
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int res = 0;
while(n != 0) {
res += n & 1;
n >>>= 1;//无符号右移
}
return res;
}
}
728.自除数
class Solution {
public List<Integer> selfDividingNumbers(int left, int right) {
List<Integer> list = new LinkedList<>();
for (int i = left; i <= right; i++) {
if (isDivisionMath(i)) {
list.add(i);
}
}
return list;
}
public boolean isDivisionMath(int n) {
int value = n;
while (value > 0) {
if (value%10 != 0 && n%(value%10) == 0) {
value /= 10;
}else {
return false;
}
}
return true;
}
}
657.机器人能否返回原点
java代码:
class Solution {
public boolean judgeCircle(String moves) {
int level =0;
int vertical=0;
for(int i=0;i<moves.length();i++){
if(moves.charAt(i)=='U'){
vertical++;
}
if(moves.charAt(i)=='D'){
vertical--;
}
if(moves.charAt(i)=='L'){
level--;
}
if(moves.charAt(i)=='R'){
level++;
}
}
return level==0 && vertical==0;
}
}
解题思路:遍历nums1和nums2找到值相同的元素并返回对应位置的下标给index,接下来判断index+1位置的元素是否大于当前index位置的元素,不大于就返回-1,大于就返回num2[j+1]位置的元素即可。
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
int[] result = new int[nums1.length];
for (int i = 0; i < nums1.length; i++) {
int found = -1;
int cur = nums1[i];
int index = -1;
for (int j = 0; j < nums2.length; j++) {
if (cur == nums2[j]) {
index = j;
break;
}
}
if (index != -1) {
for (int j = index + 1; j < nums2.length; j++) {
if (nums2[j] > cur) {
found = nums2[j];
break;
}
}
}
result[i] = found;
}
return result;
}
}