Posts

Showing posts with the label Leetcode June Month

Sort Colors

Given an array with n objects colored red, white or blue, sort them in-place   so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively. Note:  You are not suppose to use the library's sort function for this problem. Example: Input: [2,0,2,1,1,0] Output: [0,0,1,1,2,2]   class Solution {    public void sortColors(int[] nums) {         int low = 0;         int mid = 0;         int high = nums.length - 1;         int temp = 0;         while (mid <= high) {             switch (nums[mid]) {                 case 0: {                     temp = nums[low];                     nums[low] = nums[mid];                     nums[mid] = temp;                     low++;                     mid++;                     break;                 }                 case 1:                     mid++;                     break;                 case 2: {

Search Insert Position

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You may assume no duplicates in the array. Example 1: Input: [1,3,5,6], 5 Output: 2 Example 2: Input: [1,3,5,6], 2 Output: 1 Example 3: Input: [1,3,5,6], 7 Output: 4 Example 4: Input: [1,3,5,6], 0 Output: 0   class Solution {     public int searchInsert(int[] nums, int target) {                 int i = 0, length = nums.length;                 for(i=0;i<length;i++){             if(nums[i] >= target){                 return i;             }             }         return i;     } } Try it on Leetcode Here, we are iterating each element in arrays. While iterating to find perfect insert position, if current number is greater than or equal to target then that position will be result and no need to iterate further. If no position are found and we are at end of array , then last position will b

Is Subsequence?

Given a string s and a string t , check if s is subsequence of t . A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ace" is a subsequence of "abcde" while "aec" is not). Follow up: If there are lots of incoming S, say S1, S2, ... , Sk where k >= 1B, and you want to check one by one to see if T has its subsequence. In this scenario, how would you change your code? Example 1: Input: s = "abc", t = "ahbgdc" Output: true Example 2: Input: s = "axc", t = "ahbgdc" Output: false Constraints: 0 <= s.length <= 100 0 <= t.length <= 10^4 Both strings consists only of lowercase characters.   class Solution {     public boolean isSubsequence(String s, String t) {               if(s.length()==0)         return true;       in

Power of Two

Given an integer, write a function to determine if it is a power of two. Example 1: Input: 1 Output: true Explanation: 2 0  = 1 Example 2: Input: 16 Output: true Explanation: 2 4  = 16 Example 3: Input: 218 Output: false METHOD 1:   class Solution { public boolean isPowerOfTwo(int n) {     if(n<=0)         return false;       while(n>2){         int t = n>>1;         int c = t<<1;           if(n-c != 0)             return false;           n = n>>1;     }       return true; } } Try it on Leetcode If a number is power of 2, it's binary form should be 10...0. So if we right shift a bit of the number and then left shift a bit, the value should be the same when the number >= 10(i.e.,2). Check below method for more optimized solution. METHOD 2:   class Solution { public boolean isPowerOfTwo(int n) {   return n>0 && (n&n-1)==0; } } Try it on Leetcode If a number is power of 2, then i

Coin Change 2

Image
You are given coins of different denominations and a total amount of money. Write a function to compute the number of combinations that make up that amount. You may assume that you have infinite number of each kind of coin. Example 1: Input: amount = 5, coins = [1, 2, 5] Output: 4 Explanation: there are four ways to make up the amount: 5=5 5=2+2+1 5=2+1+1+1 5=1+1+1+1+1 Example 2: Input: amount = 3, coins = [2] Output: 0 Explanation: the amount of 3 cannot be made up just with coins of 2. Example 3: Input: amount = 10, coins = [10] Output: 1 Note: You can assume that 0 <= amount <= 5000 1 <= coin <= 5000 the number of coins is less than 500 the answer is guaranteed to fit into signed 32-bit integer   class Solution {        public int change(int amount, int[] coins) {         int[] dp = new int[amount + 1];         dp[0] = 1;         for (int coin : coins) {             for (int i = coin; i <= amount; i++) {                 dp[i]